Python全局解释器锁GIL与多线程

Python中如果是 I/O密集型的操作,用多线程(协程Asyncio、线程Threading),如果I/O操作很慢,需要很多任务/线程协同操作,用Asyncio,如果需要有限数量的任务/线程,那么使用多线程。
如果是CPU密集型操作,用多进程(multeprocessing)。

一、GIL

GIL(Global Interpreter Lock,即全局解释器锁),Python实质上并不存在真正的多线程,只有一个主线程在调度,由于GIL采用轮流运行线程的机制,GIL需要在线程之间不断轮流进行切换,线程如果较多或运行时间较长,切换带来的性能损失可能会超过单线程。

二、CPython引进GIL的主要原因是:

  1. 设计者为了规避类似内存管理这样的复杂竞争风险问题(race condition);
  2. CPython大量使用C语言库,但大部分C语言库都不是线程安全的(线程安全会降低性能和增加复杂度)。

三、绕过GIL的两种思路:

  1. 绕过CPytho

你可能感兴趣的:(Python,OpenCV,图像处理,Python进阶,Python,OpenCV,python,多线程,全局解释器锁GIL)