CPython里的GIL

 

GIL不是Python特性,是CPython解释器特性,因为CPython有垃圾回收机制。

GIL 本质是互斥锁,保护解释器安全。

保证线程安全,垃圾回收线程不会和其他线程一起运行。

多个线程不能实现真正并行,因为解释器GIL锁的原因(同一时间解释器只执行一个线程),但是,线程A取得GIL锁后可能因为IO原因block住,此时该线程会释放GIL锁,给其他线程B使用。

但如果A有个自己的锁,虽然其他线程抢到了GIL锁,但其他线程还是要等A用完自己的锁才能执行。

对计算来说,CPU越多越好,但对IO阻塞型操作,CPU再多也没用。

对于纯计算任务,多线程并无卵用,宜开多进程。但对于IO密集型操作,宜开多线程。

开多个进程,GIL就不起作用,才能实现真正多核。

 

 

 

posted @ 2018-03-09 15:55  Claire_xu  阅读(279)  评论(0编辑  收藏  举报