一 : 科普一分钟
二 : 多进程
进程之间是独立的,是操作系统自己来维护和管理的,python通过C接口起了一个进程,多进程可以充分的利用多核CPU
进程间独立,如果想相互访问,就必须有一个中间翻译,下面提供了几种进程间通信的方法。
进程Queue
解析 :
Queue通信,相当于父进程赋值了一个Queue给子进程,子进程在这个Queue放好数据后,序列化一个中间翻译,然后在反序列化返回给父进程,
因为进程之间内存独立,不能传递对象传递的其实就是序列化的数据
Pipe
多进程还有一种数据传递方式叫管道原理和 Queue相同
虽然内存独立,但是即使是打印也会造成打印数据错误,为了防止进程间抢屏幕打印输出,加了进程锁。
创建一个子进程相当于copy一份父进程内存数据,为了防止频繁创建,导致内存不足,所以有了进程池作为限制。
三 : 协程
协程又称微线程,coroutne,协程是一种用户态的轻量级线程。通俗点讲就是周末我在家里休息,假如我先洗漱,再煮饭,再下载电影看会很慢,用了协程的效果就好比,我在下载电影的时候去点火煮饭,此时我马上洗漱,等我洗漱好了,饭也好了,吃完饭了,电影下好了,我可以看了。
gevent 是一个三方库,可以轻松通过gevent实现并发同步或者异步编程。
解析:尝试运行发现,运行时间为Sleep最长的时间,也就是说协程能绕过IO,进行执行,极大的提高了效率.
IO(从硬盘上读一块数据,从网络读数据,从内存里读一块数据) 操作不占用CPU,计算占用CPU
通过协程,我们可以写出一个socketServer,真正socketServer的底层是用多线程来实现,我们用写成写出的效率很高,而且非常节省内存
四 : 总结
协程的优点:
无论是多进程,多线程还是协程在不同的场景用不同的模型才能高效的完成任务.