擅长:python、mysql、java
<p>拉里·黑斯廷斯(CPython的核心开发人员)有一篇关于这个主题的精彩演讲,叫做“<a href="https://youtu.be/4zeHStBowEk?t=11m40s" rel="noreferrer">Python's Infamous GIL</a>”。如果你跳到11:40,他会回答你的问题。在</p>
<p>谈话中提到:Python线程与GIL的工作方式是使用一个简单的计数器。每执行100字节代码,GIL就应该由当前执行的线程释放,以便给其他线程一个执行代码的机会。在Python2.7中,由于线程释放/获取机制,这种行为基本上被破坏了。它已经在python3中修复了。在</p>
<p>使用线程锁时,Python只执行未锁定的线程。因此,如果您有多个线程共享一个锁,那么只有一个线程将同时执行。Python不会开始执行锁定的执行绪,除非执行绪可以取得锁定。锁在那里,这样你就可以在线程之间共享状态而不引入bug。在</p>
<p>如果您有多个线程,并且由于锁定,一次只能运行1个线程,那么理论上您的程序将需要更长的时间来执行。在实践中,你应该进行基准测试,因为结果会让你大吃一惊。在</p>