1. 全局解释器锁(GIL)
- CPython解释器在内存管理上不是线程安全的, 所以创建出了一个GIL锁机制, 阻止多线程并行
- GIL锁只存在于CPython中, 对于JPython等就没有这个概念, 但由于JPython用的人比较少, 所以支持的模块也比较少, 最常用的还是CPython
2. 为何多线程访问内存要加锁
- 由于存在GIL锁, 所以多线程应该是串行的, 但是为什么访问内存还需要加锁呢?
- CPython解释器为了模拟并发执行, 默认会在线程执行100调CPU指令后(0.005s)尝试进行线程切换(修改切换时间, sys模块下sys.setswitchinterval()函数)
- 线程block后也会释放锁(例如线程执行I/O操作时)