Linux的五种IO模型
一个典型的网络IO调用分为两个阶段,分别是数据就绪和数据读写,数据就绪阶段分为阻塞和非阻塞,表现为阻塞当前线程或者是直接返回。
同步表示A向B请求调用一个网络IO接口时,数据的读写都是由请求方自己完成的;异步则是A向B请求调用一个网络IO接口时,向B传入请求的事件以及事件发生时通知的方式,A就能处理其他逻辑了,当B监听的事件处理完成后在通知A。
阻塞
非阻塞
IO复用
select/poll/epoll在监听socket是否发生事件(是否有数据可操作),一个IO复用可以监听多个套接字。(同步的)
信号驱动
内核在第一个阶段是异步,在第二个阶段是同步,与非阻塞IO的区别在于他提供了消息通知机制,不需要用户进程不断地轮询检查,减少了系统API的调用次数;