python3 GIL
1、
通过对前面多任务的相关学习,可以知道并行和并发都属于多任务,目的是提高CPU的使用效率;
但是需要注意的是,一个CPU永远不可能实现并行,也就是说一个CPU不能同时运行多个程序,但是可以在随机分配的时间片内交替执行(并发),程序之间来回切换。
2.进程和线程两者的区别:
多线程死循环会使单CPU的使用率运转到100%;
多线程的死循环会使两个CPU的使用率加起来为100%;
多进程死循环会每个CPU的使用率都达到100%;
事实表明:多线程并不会充分调用两个CPU,而是会像在一个CPU上面充分运转,多进程则是完全调用两个CPU,同时执行;
3.解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁, 于是有了GIL这把超级大锁。因为cpython解析只允许拥有GIL全局解析器锁才能运行程序,这样就保证了保证同一个时刻只允许一个线程可以使用cpu。
4.GIL:全局解释器所(global interpreter lock),每个线程在执行时候都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU,也就是说多线程并不是真正意义上的同时执行。(cpython在解析多线程时,会上gil锁,保存同时只有一个线程占用CPU)
5.解决GIL锁的问题方法:
(1)更换cpython解释器换位jpython(不建议);
(2)使用多进程完成多线程的任务;
(3)在使用多线程使用C语言实现,然后python调用。

浙公网安备 33010602011771号