Python GIL锁

匿名 (未验证) 提交于 2019-12-02 22:51:30
Cpython进程与其运行文件所产生的主进程是一个进程(文件进程相当于Cpython的一个线程)线程的特点是数据资源是共享的,而多个线程又都要共享Cpython的解释权限,共享意味着竞争,有竞争数据就不安全,所以Cpython的GIL锁(Cpython的一个线程)就产生了,根本作用是,当python文件中的线程想要执行其代码,必须获得GIL权限,否则不能执行,所以cpu的多核优势也没有了,除非多开Cpython解释器或多进程,否则同时只能运行一个线程

 

一个工人相当于cpu,此时计算相当于工人在干活,I/O阻塞相当于为工人干活提供所需原材料的过程,工人干活的过程中如果没有原材料了,则工人干活的过程需要停止,直到等待原材料的到来。

如果你的工厂干的大多数任务都要有准备原材料的过程(I/O密集型),那么你有再多的工人,意义也不大,还不如一个人,在等材料的过程中让工人去干别的活,

反过来讲,如果你的工厂原材料都齐全,那当然是工人越多,效率越高

结论:

  对计算来说,cpu越多越好,但是对于I/O来说,再多的cpu也没用

  当然对运行一个程序来说,随着cpu的增多执行效率肯定会有所提高(不管提高幅度多大,总会有所提高),这是因为一个程序基本上不会是纯计算或者纯I/O,所以我们只能相对的去看一个程序到底是计算密集型还是I/O密集型,从而进一步分析python的多线程到底有无用武之地。

多线程用于IO密集型,如socket,爬虫,web
多进程用于计算密集型,如金融分析

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!