python之GIL锁【全局解释器锁】

GIL本身是和python语法和特性无关的,这是python官方的C语言python解释器【cpython】在解释执行py代码时造成的。

GIL的影响主要是在多线程执行时,实际上每次只能执行一个线程,但是并不会影响多进程。
python创始人也曾发表过声明,在修改GIL时并不是一件容易的事情。所以现在使用官方的cpython解释器时,还是会存在这个问题的,但是我们可以把多线程换成多进程。

1.把多线程换成多进程

2.使用其他语言的解释器【例如:java编写的python解释器】

3.通过使用其他语言的动态库来执行多线程


那么,既然多线程其实在同一时刻只有一个线程可以执行,那么是单线程比多线程快吗?

这个是要看使用的场景的,在计算密集型的场景,直接使用单线程确实是比多线程快,但是在io密集型的场景下,多线程还是比单线程要快的,原因如下:

1.计算密集型指的是一些大量的纯计算运算,并没有很多的io操作
2.io密集型指的是比较多的io操作,例如文件的读取,网页信息爬取【爬虫】
3.在计算密集型的运算下,过多的切换线程并没有太大的意义,反倒是花费了更多时间
4.但是如果在io密集型运算下,有很多的io操作,这会造成一定时间的堵塞,在执行到会堵塞的代码后,多线程就会切换到其他的线程继续进行代码执行而不需要等待解堵塞,这样多线程就会比单线程更加省时间,也就是效率更高。

。。。