- I/O模型的用处:
为了更加高效的处理网络通信,满足多用户的请求,提高服务器的处理效率。
当进行一次数据的接收的时候,主要存在两中等待(和linux下类似):
(1)等待数据到达网络,当分组到达时,被复制到套接字口的缓冲区。
(2)等待将数据从套接字的接收缓冲区复制到应用程序缓冲区。
实际上,第一类等待代表等待网络中I/O条件满足,第二类等待代表具体处理I/O。不同的网络I/O模型主要差别体现在第一类等待的处理上,也就是在期待条件满足的情况发生。 - Windows系统下常见的7种I/O模型:
(1)阻塞I/O模型
(2)非阻塞I/O模型
(3)I/O复用模型(select模型)
(4)基于消息的WSAAsyncSelect模型
(5)基于事件的WSAEventSelect模型
(6)重叠I/O模型
(7)完成端口模型 - 同步、异步,阻塞、非阻塞的概念:
同步和阻塞,异步和非阻塞并不是两对相同的概念,真实的I/O操作中,消息的通知只关注I/O事件何是满足,此时可以选择持续等待事件满足(同步方式)或者通过触发机制来通知事件满足(异步方式);而处理这个I/O事件则是对消息的处理,在这里选择的是持续阻塞处理或者在阻塞情况下跳出阻塞等待。
经典故事案例:
人物:老王
道具:普通水壶(水烧开不响);响水壶(水烧开发出响声)
案例:
1、同步阻塞:
老王在厨房用普通水壶烧水,一直在厨房等着(阻塞),盯到水烧开(同步);
2、异步阻塞:
老王在厨房用响水壶烧水,一直在厨房中等着(阻塞),
直到水壶发出响声(异步) 老王知道水烧开了;
3、同步非阻塞:
老王在厨房用普通水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),
然后时不时去厨房看看水烧开了没(轮询检查同步结果);
4、异步非阻塞:
老王在厨房用响水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞)
当水壶发出响声(异步),老王就知道水烧开了
-
谈一些我的理解(希望dalao可以指正)
(1)同步的时候 任务就需要排队 一个一个的执行 相对正在执行的任务其他任务就需要等着
(2)同步与异步代表数据在用户缓冲区和内核缓冲区之间进行交换是由用户自行完成还是由内核完成。同步IO代表由用户完成,异步IO代表由内核完成。
(3)select也好,或者是linux下的信号驱动I/O也好,这种通知都是一种假的异步,也就是之前说的消息机制,而真正的去做内核数据拷贝道应用进程数据的时候是用户做的。然而真正的异步I/O模型是全部在内核中完成。
(4)异步的处理机制是内核把数据读到缓冲区 用户想要拿这个缓冲区的时候就不用去内核进行数据拷贝了。 -
下面是介绍这7种windows下IO模型的链接:(尚在完善中……)
(1)阻塞I/O模型
(2)非阻塞I/O模型
(3)I/O复用模型(select模型)
(4)基于消息的WSAAsyncSelect模型
(5)基于事件的WSAEventSelect模型
(6)重叠I/O模型
(7)完成端口模型
参考资料:
《Windows网络编程》 刘琰 王清贤 刘龙 陈熹 主编