1、概念简介
常见的 IO模型:
1)同步阻塞IO(Blocking IO):即传统的IO模型。
2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。
3)IO多路复用(IO MulTIplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型。
4)异步IO(Asynchronous IO):即经典的Proactor设计模式,也称为异步非阻塞IO。
最典型的IO多路复用技术有select、poll、epoll等。select具有最大数量描述符限制,而epoll则没有,并且在机制上,epoll也更为高效。select的优势仅仅是跨平台支持性,所有平台和较低版本的内核都支持select模式,epoll则不是。
#1、输入操作:read、readv、recv、recvfrom、recvmsg共5个函数,如果会阻塞状态,则会经理wait data和copy data两个阶段,如果设置为非阻塞则在wait 不到data时抛出异常
#2、输出操作:write、writev、send、sendto、sendmsg共5个函数,在发送缓冲区满了会阻塞在原地,如果设置为非阻塞,则会抛出异常
#3、接收外来链接:accept,与输入操作类似
#4、发起外出链接:connect,与输出操作类似
2、异步框架
async/await
asyncio
aiohttp
aiofiles
代码实例
============================================= over ============================================