""" 同步,异步: 强调结果,调用者最终是否得到想要的结构 阻塞非阻塞: 强调时间是否等待 io二个阶段 1.数据准备阶段 2.内核空间复制回用户空间缓冲区阶段 发生io时候 1.内核从输入设备读,写数据 2.进程从内核复制数据 io模型 1.同步io包括阻塞io,非阻塞io,io多路复用 阻塞io:进程等待(阻塞),直到读写完成 非阻塞io: 进程调用read操作,如果io没有准备好,立即返回error,进程不阻塞 用户可以再次发起系统调用,内核准备好,就阻塞,复制数据到用户空间 io多路复用: 就是同时监控多个io,有一个准备好,就不需要等待了开始处理,提高了同时处理io的功能 select所以的平台都支持,poll是对其的升级,epoll对poll的曾强增加回调机制,select最多监控 1024个fd,select轮询的方式,效率低下 epoll,fd没有上限,并且是回调机制,不需要遍历,效率高 2.异步io 进程发起异步io请求,立即返回,内核完成io的二个阶段,内核给进程发一个信号 linix aio的系统调用 """
''' abstractmethod register(fileobj,events,data=None) 为selector注册一个文件对象,监视他的io事件 fileobj被监视文件对象,例如socket events事件,该文件对象必须等待的事件 data可选的与此文件对象相关联的不透明数据,例如关联用来存储每个客户端的会话id event_read 可读0b01内核准备好输入输出设备,可以开始读了 event_write可写0b10内核准备好了,可以写了 '''