对于网络并发编程而言,多线程与多进程算是最常见的需求场景了。毕竟网站开放就是想要更多的流量访问的。
回顾
回顾下之前学过的关于线程,进程和协程的知识点
IO密集型任务--用多线程更好
计算密集型任务--用多进程更好
线程概念:计算机中工作的最小单元
进程:默认有主线程,可以有多线程共存,并共享内存资源。
协程:使用进程中的一个线程去做多个任务,微线程pypy
GIL:全局解释器锁,python特有,用于在进程中对所有线程加锁,保证同时只能有一个线程被CPU调度
一句话说明什么是协程:协程是一种用户态的轻量级线程。
协程的特点:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。
那么符合什么条件我们可以称之为协程?
协程需要满足四个条件:
- 必须在只有一个单线程里实现并发
- 修改共享数据不需加锁
- 用户程序里自己保存多个控制流的上下文栈
- 一个协程遇到IO操作自动切换到其它协程
当然,协程也有自身的优缺点,这里不展开。
在python中,我们可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。