线程池与Python中的GIL
线程池是一个操作系统的概念,它是对多线程的一种优化。
多线程的时候,创建和销毁线程伴随着操作系统的开销,如果频繁创建/销毁线程,则会使效率大大降低。
而线程池,是先创建出一批线程放入池子里,需要创建线程的时候从这个池子里取,用过了再放这个池子里。
显然,使用线程池节省的是线程创建和销毁的时间。
因为创建出的线程要放在内存中某处,所以这是一种用空间换时间的做法。
使用线程池还有一个好处,那就是它限制了多线程的数量。
线程池里有多少线程可以人为指定。
加入不使用线程池,那么如果一下子创建了很多线程,线程之间的调度会浪费很多时间。
线程池限制了多线程情形下线程数量,通过减少多线程,提升执行效率。
在Python中,由于有一个GIL(Global Interpreter Lock)锁,任何Python线程执行之前,都要先获得GIL锁。
每执行100条字节码,解释器自动释放GIL锁,让别的线程有机会在同一个CPU上执行。
所以从表面上来看,由于GIL的存在,Python中的多线程似乎作用不大。
实际上还是有点作用的,对于IO密集型任务,当一个需要等待较长时间的时候,会让出GIL,以便其他线程可以获取
GIL并运行。