并发和并行
- 并发:交替处理多个任务
- 并行:同时处理多个任务
- 区别:从时间上来看 并发是在一段时间的多任务实现,并行是一个时间点上的多个任务实现
GIL(全局解释器锁)
在python中多线程是不能真正的让多核CPU实现并行
原因:cpython解释器中存在一个GIL(全局解释器锁),他的作用就是保证同一时刻只有一个线程可以执行
优点:可以在单核CPU电脑上实现多任务(并发) ---> 目前过时
解决方案:
1.更换解释器,比如使用jpython (不推荐)
2.使用多进程完成多任务的处理
GIL总结
- python语言和GIL没有半毛线关系,是因为历史原因在Cpython解释器,难以移除GIL
- GIL:全局解释器锁.每个线程在执行的过程需要先获取GIL,保证同一时刻只有一个线程可以执行代码
- 线程释放GIL锁的情况:在IO操作等可能引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL;python3.x 使用计时器
- python使用多进程是可以利用多核的CPU资源的
- 多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁
结论
- 在处理象科学计算这类需要持续使用CPU的任务的时候,单线程会比多线程快
- 在处理象IO操作等可能引起阻塞的这类任务的时候,多线程会比单线程快