web*_*at0 11 python multithreading
我听说Python中的线程效率不高(与其他语言相比).
这是真的?如果是这样,Python程序员如何克服这个问题呢?
Jes*_*hen 19
人们之所以说多线程在python中效率不高是因为Global Interpreter Lock.由于编写解释器的方式,只有一个线程可以同时安全地在解释器中执行代码.
这意味着如果您的线程具有相当大的计算限制,即在解释器中执行大量操作,那么您实际上仍然只具有单线程程序的性能.在这种情况下,您最好使用多处理模块,该模块与多线程模块具有相同的接口,但会启动解释器的多个副本(这样做的缺点是您必须明确共享内存).
你仍然可以从python中的多线程获得速度增益,如果你正在做一些严重IO绑定的事情.当一个线程正在等待磁盘或网络i/o时,其他线程仍然可以执行,因为当线程阻塞它们时会释放解释器锁.
CPython使用引用计数和循环垃圾收集器进行内存管理.为了实现这一点,它有一种称为"全局解释器锁"的机制,它保护引用计数系统以及所有其他解释器内部.
在单核机器上,这无关紧要 - 无论如何,所有线程都是通过时间切片伪造的.在多核机器上,它有所不同:在CPython上运行的CPU绑定Python程序将不会使用所有可用内核.
对此有很多可能的回应:
如果线程被用于将阻塞IO转换为非阻塞操作,那么在标准CPython中可以正常工作而无需任何特殊修改 - IO操作已经释放了GIL.
| 归档时间: |
|
| 查看次数: |
4884 次 |
| 最近记录: |