在了解之前要先了解一下下面几个问题:
1、GIL的概念
2、对python线程中的影响
3、利用多线程是不是比单线程抓取速度有提升,解释原因
对于这几个问题,我按照我的理解去回答:
对于GIL而言与python没有半毛钱的关系,GIL的出现仅仅在于在cpython(用c语言写的解释器)在执行的时候遗留下来的问题,在同一时刻,只能执行一个线程。(其实吧,也就是在很早很早之前,设计出来python语言的人,当时没有想到以后的cpu会出现多核,导致当时写解释器的时候没有考虑到,当发现问题的时候,曾试着对解释器进行升级,但效率不如带着GIL的速度快,然后就保留了下来)至于如何解释GIL的情况:在io(读写)操作时,对于要读或者写的文件是非常大的,并且在读或者写的时候会出现一定时间的间隔,所以这个时候GIL会对此操作有一定的限制作用。
介绍两种读取类型:
计算密集型——————一般采取多进程进行编码——————此时多核在运行,可以实现并行
io密集型————————一般采用多线程或者协程(利用gevent)来编码 ————此时只有一个核在工作,实现并发
python解释器,有很多的”版本“,有用c写的解释器,也有java写的解释器,一般只有c写的解释器才会存在GIL,所以想要避免遇到GIL可以使用其他程序写的解释器,当然也可以使用其他代码来实现某些功能。
python是解释型语言,又称为胶水语言,他可以调用其他语言写的代码,并且可以运行。