0
点赞
收藏
分享

微信扫一扫

从通俗易懂的角度来看python

1.内存是一本空白的书

你可以想象计算机的内存就如同一本空白的书,用于写上简短的小故事,每一页纸都是空白的。之后,随着不同作者的到来,每一位作者想要一些空白的地方写上他们的故事。
由于他们不允许去修改别人的内容,所以他们必须要小心翼翼的注意他们所书写的页面。在开始写作之前,他们必须要先询问该书的管理员。然后管理员告诉他们允许书写的地方。
因为这本书已经很旧,许多书中的一些故事也不再有任何关联。当没有人阅读或者引用故事时,这些故事就会被删除,腾出空间给新的故事。
本质上,计算机的内存就像是那本空白的书。其实通常称为固定长度的连续内存页(memory pages),这个比喻非常切当。
书的作者更像是不同的应用或者进程,它们需要将数据存在内存里。而那个决定作者可以使用书中哪些空间的管理员,扮演着内存管理员的角色。那个把旧故事删除腾出空间给新故事的人则是一个垃圾回收员。

2.内存管理:从硬件至软件

内存管理是一个处理应用数据读写的过程。一个内存管理决定在哪里存放应用的数据。但是由于内存块是有限的,就像我们比喻的书的纸张一样,管理员需要找到可用空间并且提供给应用使用。这个将内存提供使用的过程通常被称为内存分配(memory allocation)。
另一方面,当数据已经不再被使用时,它就可以被删除或者被释放。但是释放到哪里去?这个“内存”又是从何而来呢?
当你运行Python程序时,在计算机的某个地方,有一个物理设备用于存储数据。然而在对象去到硬件前,Python代码需要经过许许多多的抽象层。
其中一个主要的层就是位于硬件(例如RAM或者一个硬盘驱动器)上层的操作系统,简称OS。它根据要求去执行(或者拒绝)读写内存。
在操作系统之上就是应用程序,其中一个就是默认的Python实现(被预先安装在你的操作系统或者从python.org下载安装的)。你代码的内存管理是由Python应用进行处理。Python进行内存管理的算法和结构将是本文主要关注的内容。

3.全局解释锁(GIL)

GIL是一个用来解决共享资源这类常见问题的方案,例如计算机的内存。当两个线程同一个时间尝试去修改一个相同的资源时,它们会互踩脚趾。最终的结果会是一片狼藉,只有一个线程得到它想要的结果。
回到用书做的比喻,假设两个作者都顽固的认为当前是到他们写的时候。不仅如此,他们两个可能还同一时间在同一本书的同一页上写。
他们都忽略了另外一方尝试去编写故事并且还在同一页纸。最后的结果是两个故事都在彼此的上面,这样就会造成整页都不可读。
对于这个问题的解决方案就是当一个线程和共享资源(书上的页纸)交互的时候,在解释器上使用一个单独全局锁。换句话说,只允许同一个时间内允许一个作者写作。
Python的GIL通过将整个解释器锁住来完成这个操作,这也就意味着不会再发生线程互踩的情况了。当CPython处理内存时,它使用GIL来保证操作的安全性。

去期待陌生,去拥抱惊喜。

举报

相关推荐

0 条评论