- 论坛徽章:
- 0
|
原帖由 青椒不辣 于 2007-10-3 17:52 发表 ![]()
是这样的,去掉GIL没有太大的价值,而且在新版本的python(包括python3k)也是不会取消的。
在1999年Greg Stein和Mark Hammond创建了一个去掉GIL的1.5分支,将GIL替换为细粒度锁。但是,做过了基准测试之后,结果令人失望,在最好的情况下,单线程的效率只有原来的一半。另外去掉 GIL 将会造成对解释器的大量的重写,它会使扩展模块变得复杂,一旦扩展有任何的全局可变数据,将不得不为多线程并发调用做好准备。也可能需要对 Python/C API进行改动,它们是为了在一系列的调用中需要对某种对象加锁所需要的。
出于以上考虑,Guido尽管欢迎有人来维护一个无GIL的python分支,但他本人不会花太多精力。
最后,尽管不会取消GIL, 但是着并不意味着不能充分利用多cpu,有一下几种方法:
1.可以创建多个进程而不是线程,进程数和cpu一样多。
2.使用Jython 或 IronPython,可以得到真正的多线程。
谢谢青椒不辣和ghostwwl两位的回复。我现在的理解是:去掉 GIL的工作是得不偿失的,细粒度锁版本的效率是原来的1/2;另外,去掉 GIL的工作量是巨大的,要求对Python解释器的大量的重写,因此Guido不愿意做这件事情。 |
|