python进程、线程、协程

基本观点:

1、一个python进程一个GIL(全局锁),每个线程需要获取这个锁才能执行。

2、cpu密集型的程序,使用多进程。

3、IO密集型的程序,多线程可能会比多进程快。

4、多核cpu执行多进程会不会比单进程快?答案是:会(如果进程切换开销足够小)。这个跟操作系统的调度算法有关系。参考:https://superuser.com/questions/257406/can-a-multi-core-processor-run-multiple-processes-at-the-same-time

5、线程之间切换会有很大的开销,因此协程出现了,协程是用户控制调度的轻量级线程,实际多个协程是属于同个线程的,没有切换开销。python的协程可以通过yield、next、send关键字控制,也可以引入第三方库gevent,更加方便。

对于3的观点,假设以下两种情况:

a、单进程多线程:1*100

b、多进程多线程:10*10

都是100个线程,cpu是10核心。对于b,10个进程占用10个核心,每个进程只有10个线程进行切换。对于a,100个线程之间的切换需要大量的开销,总切换开销比b多。

posted on 2017-05-04 14:03  bytesmover  阅读(138)  评论(0编辑  收藏  举报