【 在 hgoldfish 的大作中提到: 】
: multiprocessing 多进程时是可以跳过 GIL 的,都在不同的进程了。没问题的。
: 而子解释器底层是多线程,所以交换数据特别快。又每个线程都拥有自己的 GIL,所以仍然兼容以前的第三方模块,或者只需要少量改动。这个方案应该是最佳的。Python 目前已经完成了每个线程都拥有自己的 GIL 这个改造。创建多个子解释器的 API 也已经有了。现在还缺的是实现子解释器之间的极速对象传递。离最终完成已经不远了。
: 对比一下,go, java 都把协程和线程混合所以带来几个大的缺点:
: ...................
嗯, 多进程, 都在不同进程了, GIL自然不共享。
不过, 多线程, 实际上, multithread的多个实例, 都跑在同一个解释器下, 其实也都跑在同一个线程下面, 因此, 也就没有了多线程竞合。当然也有调度产生的执行序列被分片。但是, 线程锁已经不是实际意义的线程锁,因为都在一个线程里。
--
FROM 124.126.3.*