IO的过程
一次IO都会有两个阶段:
❶ 等待数据,即数据从磁盘到内核内存.
❷ 复制数据,即数据从内核内存到进程内存.
5种IO模型
阻塞型 # 阻塞/非阻塞,关注的是调用结果返回前调用者的状态
非阻塞型
复用型
信号驱动型
异步
阻塞型(block): .
调用结果返回之前,IO的两个阶段调用者被“挂”起.比如你去钓鱼,只是一直等着看,只到鱼上钩才处理.
非阻塞型(noblock)
调用结果返回之前,调用者不会被“挂”起。即IO第一阶段调用者是不会被阻塞的,但也是处于“盲”等待即无目的地等待(所以效率上未必强于阻塞型),只在第二阶段会被阻塞.比如你去钓鱼,放下鱼钩后你就在一旁玩手机或看书,只是偶尔才过去看一看鱼有没有上钩.
同步(sync)
调用者等待对方(被调用者 )返回消息
异步(async)
被调用者通过状态、通知或回调机制通知调用者被调用者的运行状态
复用型(多路输出)
select() 1024个限制 BSD
poll() sysv