想写一篇介绍IO模型的文章,先挂在这儿提醒自己,有时间补上
主要借鉴文章http://blog.csdn.net/baixiaoshi/article/details/48708347
其实IO模型主要有几大类:
1.阻塞IO
2.非阻塞IO
3.I/O复用
4.信号驱动IO
5.异步IO
其实这么分有时候容易造成一些误解,因为这几大类IO中有的是相互包含的,相互之间并非不相关。当然了,一般认为前四种IO都是同步IO(其实不一定,比如非阻塞就应该和异步搭配,而非阻塞和同步搭配的话是一种很蠢的行为,比如UNP v1中举的非阻塞IO例子就是非阻塞同步,这样非阻塞的优势并不能体现出来),与第五种相斥。
这里先帮大家区分同步和异步的概念:
同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。
阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成。