从通俗易懂的角度来看python
1.内存是一本空白的书
你可以想象计算机的内存就如同一本空白的书,用于写上简短的小故事,每一页纸都是空白的。之后,随着不同作者的到来,每一位作者想要一些空白的地方写上他们的故事。
由于他们不允许去修改别人的内容,所以他们必须要小心翼翼的注意他们所书写的页面。在开始写作之前,他们必须要先询问该书的管理员。然后管理员告诉他们允许书写的地方。
因为这本书已经很旧,许多书中的一些故事也不再有任何关联。当没有人阅读或者引用故事时,这些故事就会被删除,腾出空间给新的故事。
本质上,计算机的内存就像是那本空白的书。其实通常称为固定长度的连续内存页(memory pages),这个比喻非常切当。
书的作者更像是不同的应用或者进程,它们需要将数据存在内存里。而那个决定作者可以使用书中哪些空间的管理员,扮演着内存管理员的角色。那个把旧故事删除腾出空间给新故事的人则是一个垃圾回收员。
2.内存管理:从硬件至软件
内存管理是一个处理应用数据读写的过程。一个内存管理决定在哪里存放应用的数据。但是由于内存块是有限的,就像我们比喻的书的纸张一样,管理员需要找到可用空间并且提供给应用使用。这个将内存提供使用的过程通常被称为内存分配(memory allocation)。
另一方面,当数据已经不再被使用时,它就可以被删除或者被释放。但是释放到哪里去?这个“内存”又是从何而来呢?
当你运行Python程序时,在计算机的某个地方,有一个物理设备用于存储数据。然而在对象去到硬件前,Python代码需要经过许许多多的抽象层。
其中一个主要的层就是位于硬件(例如RAM或者一个硬盘驱动器)上层的操作系统,简称OS。它根据要求去执行(或者拒绝)读写内存。
在操作系统之上就是应用程序,其中一个就是默认的Python实现(被预先安装在你的操作系统或者从python.org下载安装的)。你代码的内存管理是由Python应用进行处理。Python进行内存管理的算法和结构将是本文主要关注的内容。
3.全局解释锁(GIL)
GIL是一个用来解决共享资源这类常见问题的方案,例如计算机的内存。当两个线程同一个时间尝试去修改一个相同的资源时,它们会互踩脚趾。最终的结果会是一片狼藉,只有一个线程得到它想要的结果。
回到用书做的比喻,假设两个作者都顽固的认为当前是到他们写的时候。不仅如此,他们两个可能还同一时间在同一本书的同一页上写。
他们都忽略了另外一方尝试去编写故事并且还在同一页纸。最后的结果是两个故事都在彼此的上面,这样就会造成整页都不可读。
对于这个问题的解决方案就是当一个线程和共享资源(书上的页纸)交互的时候,在解释器上使用一个单独全局锁。换句话说,只允许同一个时间内允许一个作者写作。
Python的GIL通过将整个解释器锁住来完成这个操作,这也就意味着不会再发生线程互踩的情况了。当CPython处理内存时,它使用GIL来保证操作的安全性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!