GIL: global interpreter lock
确保在同一时刻只有一个线程能够执行Python字节码:当Python解释器运行Python代码时,它会获取GIL,然后执行相应的字节码指令。其他线程想要执行Python字节码时,必须先获取GIL,但只有在当前线程释放GIL后才能获得。
为什么有GIL:解释器的C语言实现部分在完全并行执行时并不是线程安全的,所以需要GIL用于保护。
如何选择多进程/多线程?每个进程有一个GIL,所以对于IO密集的任务,一个进程中使用多线程影响不大,对于cpu密集型任务,则需要使用多进程。