线程池与Python中的GIL

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

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

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

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

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

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

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

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

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

 

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

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

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

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

GIL并运行。

 

posted @ 2018-01-07 10:58  geeklove  阅读(244)  评论(0编辑  收藏  举报