阻塞I/O模型
在服务端开设多进程或多线程,进程池或线程池,其实还是没有解决IO问题
非阻塞I/O模型
该模型会长时间占用CPU但是不干活,让CPU不停地空转
实际应用中不考虑使用使用非阻塞I/O模型
I/O多路复用
当I/O多路复用监测一个对象时,效率不如阻塞I/O模型
但是I/O多路复用可以一次性监测很多对象
监测机制select是操作系统的功能,使用是需要导入select模块
select和poll检测的原理是for循环地检测每一对象,当循环到某个对象时,这个对象还是阻塞的,循环到下一个对象时,这个对象不阻塞了,要等到一圈
监控机制 | Windows | Linux | 缺陷--改善 |
---|---|---|---|
select | 有 | 有 | 检测的对象特别多时,可能会出现很大的响应延时 |
poll | 无 | 有 | 检测的对象特别多时,可能会出现很大的响应延时 |
epoll | 无 | 有 | 给每一个监测对象绑定一个回调机制,一旦有响应,回调机制立刻发起提醒 |
异步IO
异步IO模型是所有模型中效率最高的,也是使用最广泛的
asyncio模块
异步框架:sanic,FastAPI,tornado
各模型之间的比较