| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python GIL(全局解释器锁) 和 多线程锁 -> 正文阅读 |
|
[Python知识库]python GIL(全局解释器锁) 和 多线程锁 |
文章目录什么是 GIL?Python 虚拟机默认使用的是 CPython 解释器(C 语言实现),CPython 使用了 GIL (Golbal Iterpreter Lock - 全局解释器锁),来确保同一时间只有一个线程运行,所以即使再多的线程也只能有效的使用一个 CPU。 由于 GIL 的存在,即便是多线程的 Python 程序也无法利用多核 CPU 的优势。不过 I/O 密集型程序,依然适合使用多线程,因为它们大部分时间都在等待 I/O,对 CPU 依赖很低。 有了 GIL 还需要线程锁吗?需要。GIL 只是解释器级别的锁,它能保证当多个线程在修改一个变量时不会崩溃,但结果可能是错乱的。 (虽然说Python有了GIL来锁住线程,但是并不意味着编写Python的程序的时候就不需要去注重线程安全了,因为有check_interval机制,还是会导致线程安全的问题。,因为有check_interval机制,还是会导致线程安全的问题) 如多个线程修改全部变量i = i + 1,是先读取 i,再加 1 后,最后写回内存,这会把在读与写期间其他线程对 i 的所有修改覆都盖掉。所以我们需要用线程锁来对整个读写过程加锁。 CPU 密集型 - 数学计算、搜索、图像处理等 参考资料1 :终于有人把GIL全局解释器说清楚了2:浅谈Python多线程之GIL描述3:多线程锁机制 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 0:34:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |