线程池与Python中的GIL

Posted geeklove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池与Python中的GIL相关的知识,希望对你有一定的参考价值。

线程池是一个操作系统的概念,它是对多线程的一种优化

多线程的时候,创建和销毁线程伴随着操作系统的开销,如果频繁创建/销毁线程,则会使效率大大降低。

而线程池,是先创建出一批线程放入池子里,需要创建线程的时候从这个池子里取,用过了再放这个池子里。

显然,使用线程池节省的是线程创建和销毁的时间。

因为创建出的线程要放在内存中某处,所以这是一种用空间换时间的做法。

使用线程池还有一个好处,那就是它限制了多线程的数量。

线程池里有多少线程可以人为指定。

加入不使用线程池,那么如果一下子创建了很多线程,线程之间的调度会浪费很多时间。

线程池限制了多线程情形下线程数量,通过减少多线程,提升执行效率。

 

在Python中,由于有一个GIL(Global Interpreter Lock)锁,任何Python线程执行之前,都要先获得GIL锁。

每执行100条字节码,解释器自动释放GIL锁,让别的线程有机会在同一个CPU上执行。

所以从表面上来看,由于GIL的存在,Python中的多线程似乎作用不大。

实际上还是有点作用的,对于IO密集型任务,当一个需要等待较长时间的时候,会让出GIL,以便其他线程可以获取

GIL并运行。

 

以上是关于线程池与Python中的GIL的主要内容,如果未能解决你的问题,请参考以下文章

27 Apr 18 GIL 多进程多线程使用场景 线程互斥锁与GIL对比 基于多线程实现并发的套接字通信 进程池与线程池 同步异步阻塞非阻塞

GIL 线程池与进程池 同步与异步

python第三十七天,GIL全局解释器锁*****,线程池与进程池 同步异步,阻塞与非阻塞,异步回调

线程

python-进程池与线程池,协程

Python线程池与进程池