关于Linux&Python&线程&进程的一点随笔

来源:互联网 发布:如何取消淘宝订单 编辑:程序博客网 时间:2024/05/22 01:28

多任务的并行处理,为防止阻塞,本打算用线程处理,但经实际测试后效果很不理想(当然肯定也和我对线程的不熟悉有关),发现还是多进程稳定可靠:)

PS:Chrome为每个标签页开一个进程就是为了安全和稳定。

上网查阅也经常看到一些说法,如

在 IBM® developerWorks® 的 早期文章 中,我演示了使用 Python 实现线程式编程的一种简单且有效的模式。但是,这种方法的一个缺陷就是它并不总是能够提高应用程序的速度,因为全局解释器锁(Global Interpreter Lock,GIL)将线程有效地限制到一个核中。如果需要使用计算机中的所有核,那么通常都需通过 对 经常使用 fork 操作来实现,从而提高速度。

 

摘自:http://www.ibm.com/developerworks/cn/aix/library/au-multiprocessing/

由于Python中极具争议的GIL机制,使线程成为Python的一个弱项(当然相对于C/C++、Java这些语言来说)。

延伸阅读:线程安全及Python中的GIL

 

而且据说在Linux下,由于内核机制的原因,线程貌似确实没有进程使用的广。

同一件任务,为了充分利用CPU调高处理效率,一般Linux下的程序如果跑多线程,线程数会和CPU数量密切相关。例如:4核CPU,1核给主线程,还剩3核所以一般只需另起三个线程。而windows下这种情况一般会开大量线程来处理。厄……我目前的理解是这样的,不知道对不对,而且具体差别的底层原因也没有想明白~_~

 

Python 2.6中引入了新的多进程处理模块 multiprocessing,据说灰常牛逼。

刚刚接触,也没有太深入了解。

内部貌似直接解决了僵尸问题,这个倒是蛮人性的:D。

 

另外,测试中还发现一个点:单例模式在多线程中依然有效。

由于成员变量保存在堆里,参数变量保存在栈里。

对线程来说,栈是独立的,而堆还是共享的。

所以……应该是这样的吧~

 

嗯,就这么多了,不对之处恳请指正:)

 

 

 

 

 

原创粉丝点击