对于CPU密集型的单核处理,采用多线程。
对于CPU密集型的多核处理,采用多进程。
对于IO密集型的场景,采用多线程。
对于IO密集和CPU密集型的混合场景,综合考虑进进程和线程,可以一开始配置一个进程池,将可能的CPU密集型的任务交给进程池去完成,将IO密集型的任务交给线程。
操作系统中进程与线程直观认识
重点是 单线程性能不降低时,GIL才有可能去除,换言之,多线程方式有可能减低单线程性能 ?
GIL 的 意义
GIL起源
python 调用 .so
解决GIL方案
除了 Cpython ,其他语言实现的 python 几乎都没有使用引用计数的方式,可以避免GIL 带来的问题
IO核 CPU密集型解决方案
python 多核解决方案
三个维度:
CPU
操作系统
Python
GIL 多进程解决方案
python GIL
进行与线程的关系
多线程与异步
进程与线程
很好很好很好很好很好很好很好很好
很好很好很好很好很好很好很好很好
GIL实在底层的一把锁,是butecode字节码级别的互斥锁,保证同一时刻只有一个线程来控制Python解释器。
GIL存在的意义
GIL在单核时代最初的目的是解决资源引用计数的安全性问题
IO密集型的任务,可以用多线程;CPU密集型的任务,推荐多进程
Python现有的C扩展在很大程度上依赖GIL提供的解决方案,如果要更改GIL,则需要重新解决这些库的线程安全问题
操作系统中的进程与线程
操作系统中的进程与线程
GIL (Global Interpreter Lock) -- 全局解释器锁