【发布时间】:2017-09-14 05:08:35
【问题描述】:
我最近遇到了 Python 中的 GIL,根据该 GIL,一次只能执行一个线程,而多线程不能利用所有内核。
现在在我的一个项目中,我使用了多线程以及大量的锁和信号量 所以在这里我的问题是,如果我不使用锁和信号量,我能达到同样的效果吗?即如果我从我的项目中删除并发逻辑。
编辑:我想知道的是,如果我删除并发逻辑是否可以获得相同的功能,我知道 GIL 是什么,它会阻止线程使用所有内核并且一次只运行一个线程。
【问题讨论】:
-
如果有帮助,Project 不受 I/O 限制,它的 CPU 密集型。
-
@AmitGupta 它没有回答我的问题,即如果所有线程由于 GIL 的存在而没有同时运行,是否仍然需要使用锁和信号量来保护共享资源。
-
@VINAYCHAUHAN 是的,如果您有多个线程和共享资源,即使存在全局解释器锁,您仍必须使用互斥锁序列化对它们的访问
-
你永远不知道你什么时候会失去 GIL,它可能在一个包含多个字节码指令的操作之间。
标签: python multithreading gil