协程
一、阻塞和非阻塞 1. 程序运行中的状态 New 进程正在被创建 Running 进程的指令正在被执行 Waiting 进程正在等待一些事件的发生(例如 I/O 的完成或者收到某个信号) Ready 进程在等待被操作系统调度 Terminated 进程执行完毕(可能是被强行终止的) 2. 定义 阻塞和非阻塞描述的是进程的一个操作是否会使进程转变为等待的状态。 阻塞:程序调用了包含I/O操作的system call,因为system call涉及到了I/O操作不能立即完成,于是内核会将该程序设置为等待状态,调度其他的进程运行,等到它所请求的IO操作完成了以后,再将其改回就绪状态。 非阻塞:程序没有IO操作(或者调用了非阻塞I/O系统调用,一个非阻塞I/0系统调用不会让进程挂起),或者遇到IO通过某种手段让CPU去执行该进程的其他任务(协程)。 二、 同步异步 1. 定义 站在任务发布的角度 同步: 进程将任务发出去之后,等待,直到这个任务最终结束之后,给进程一个返回值,进程再在发布下一个任务 异步:进程发布一个任务后,立即得到一个返回值,就去发布下一个任务;前面发布的任务运行完毕得到结果后会给进程发送一个信号,让进程去接收结果 2. 异步 + 调用机制(爬虫) 版本一:多进程并发执行爬取数据,串行执行数据处理 from concurrent.futures import