了解带锁的抢占式多任务处理和Python GIL?
我正在通读,它在关于锁定的讨论中有以下陈述 只要没有线程在休眠、I/O或其他GIL丢弃操作时持有锁,就应该使用最粗糙、最简单的锁。其他线程无论如何也不能并行运行了解带锁的抢占式多任务处理和Python GIL?,python,locking,multitasking,gil,Python,Locking,Multitasking,Gil,我正在通读,它在关于锁定的讨论中有以下陈述 只要没有线程在休眠、I/O或其他GIL丢弃操作时持有锁,就应该使用最粗糙、最简单的锁。其他线程无论如何也不能并行运行 它是在一次关于先发制人多任务处理的讨论之后出现的。当您拥有锁时,什么可以防止GIL的先发制人下降?或者这不是这句话所指的吗?我问了这篇文章的作者,它归结为因为等待外部操作而放弃GIL与内部抢占之间的区别: 嗨!没有任何东西可以阻止线程在运行时先发制人地丢弃GIL 它有一把锁。让我们称之为线程A,假设还有 如果线程a持有锁并被抢占,那么可
它是在一次关于先发制人多任务处理的讨论之后出现的。当您拥有锁时,什么可以防止GIL的先发制人下降?或者这不是这句话所指的吗?我问了这篇文章的作者,它归结为因为等待外部操作而放弃GIL与内部抢占之间的区别: 嗨!没有任何东西可以阻止线程在运行时先发制人地丢弃GIL 它有一把锁。让我们称之为线程A,假设还有 如果线程a持有锁并被抢占,那么可能 线程B可以代替线程A运行 如果线程B正在等待线程A持有的锁,那么线程B不在等待GIL。在这种情况下,线程A在丢弃GIL后立即重新获取GIL,线程A继续 如果线程B没有等待 线程A持有的锁,那么线程B可能获得GIL 然后跑 然而,我关于粗锁的观点是:没有两条线 可以并行执行Python,因为GIL。所以使用 细粒度锁不能提高吞吐量。这与 一种类似Java或C的语言,其中细粒度锁允许更大的 并行性,从而提高吞吐量 我仍然需要一些澄清,他确实证实了这一点: 如果我理解正确的话,我引用的语句的目的是避免在外部操作中使用锁,如果多个线程都依赖于该锁,那么就可以阻塞多个线程 对于抢占式示例,线程A没有被外部任何东西阻塞,因此处理只是来回地进行,类似于协作多任务处理