IO模型

阻塞IO

发起请求就一直等待,直到数据返回。

比如老师盯着学生完成作业。

非阻塞IO

不管有没有数据都返回,没有就隔一段时间再来请求,如此循环。
比如老师时不时问学生完成作业没。

多路复用IO

I/O是指网络I/O,多路指多个TCP连接(即socket或者channel),复用指复用一个或几个线程。意思说一个或一组线程处理多个连接。
比如课堂上学生做完了作业就举手,老师就下去检查作业。

信号驱动IO

事先发出一个请求,当有数据后会返回一个标识回调,这时你可以去请求数据。

比如老师叫学号1,2,3上黑板默写。叫到1的时候,1就可以上去默写了。

异步IO

发出请求就返回,剩下的事情会异步自动完成,不需要做任何处理。

比如老师叫班长安排值日,自己什么也不用管

总结

五种IO的模型:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO和异步IO;前四种都是同步IO,在内核数据copy到用户空间时都是阻塞的。
阻塞IO和非阻塞IO的区别在于第一步,发起IO请求是否会被阻塞,如果会那就是传统的阻塞IO,如果不会那就是非阻塞IO。
同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO;如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO


文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
  目录