总结一下这两天的学习成果--python3的并发编程及web后端架构解决方案
GIL
受限于不可释放的历史负担,GIL的存在使得一个python解释器(也就是一个进程)在同一时刻只能使用一个cpu内核(也就是同一时刻只能跑一个线程)。
多线程(建议使用标准库的threading模块)
代表真实的操作系统线程。线程的使用很方便,常见的方法和其他编程语言类似,是从Threading继承,然后override run()方法,在方法里写线程代码。使用的时候 创建线程对象,调用他的start()方法。
Queue 相当于go里的chan,可理解为线程安全队列,支持FIFO和FILO两种形式
有了Threading和Queue其实,多线程编程就基本上OK了。但是前面说到由于GIL的存在,多线程在python里面很鸡肋,尽管在IO密集型的应用场景(当前线程IO忙碌的时候切换到另一个线程运行)多线程还是很有意义的,但是还是太受限了.
于是就出现了
多进程(建议使用标准库的multiprocessing模块)
可能是由于多线程在python里面受限,自然而然想到用多进程来解决并发问题,所以python标准库对多进程的封装是我见过的各种语言里面做得最好用的。多进程的创建,进程通信太easy了。而且multiprocessing模块直接仿照threading模块的接口协议设计了多进程的api接口。学习成本非常低。Queue也可以用于多进程通信,此外使用管道pipe通信也非常简单。