Unix下可用的5种I/O模型:
- 1、阻塞式IO
- 2、非阻塞式I/O
- 3、I/O复用(select和poll)
- 4、信号驱动式(SIGIO)
- 5、异步I/O
一、阻塞式I/O模型
难道这个是传说中的一条道跑到黑?
二、非阻塞式I/O模型
相当于网上订票,不停的刷页面,看有余票没?没有的话不停地刷,刷到有票开始订购。这比喻不知道合适不?
进程把一个套接字设置成非阻塞是在通知内核:当所请求的I/O操作非得把本进程投入睡眠才能完成时,不要使本线程睡眠,而是返回一次错误。
当一个应用进程像这样对一个非阻塞描述符循环调用recvfrom时,我们称之为轮询。应用程序持续轮训内核,以查看某个操作是否就绪。这么做往往耗费大量CPU时间。
进程反复调用recvfrom等到返回成功指示。
三、I/O复用模型
select和
poll
进程受阻于select调用,等到可能多个socket中的任意一个变为可读。
当返回的套接字可读,我们在调用recvfrom把所读的数据报复制到应用进程缓存区。
四、信号驱动式I/O
我们也可以用信号,让内核在描述符就绪时发送SIGIO信号通知我们,我们称这种模型为信号驱动式I/O。
我们首先开启套接字的信号驱动式I/O功能,并通过sigaction系统调用安装一个信号处理函数。该系统调用将立即返回,我们的进程继续工作,也就是说它没有被阻塞。当数据报准备好读取时,内核就为该进程产生一个SIGIO信号。我们随后既可以在信号处理函数中调用recvfrom读取数据报,并通知主循环数据已准备好待处理,也可以立即通知主循环,让它读取数据报。
五、异步I/O
机制是告知内核启动某个操作,并让内核在整个操作完成后通知我们。
这种模型与四信号驱动式的主要区别在于:
信号驱动式是由内核通知我们何时可以启动一个I/O操作。
而异步I/O是由内核通知我们I/O操作何时完成。
阻塞式I/O
发起——阻塞——>完成
非阻塞式I/O
检查、检查...——阻塞——>完成
I/O复用
检查——阻塞——>就绪发起——阻塞——>完成
信号驱动式
通知发起——阻塞——>完成
异步I/O
发起 通知
可见前四种模式最后都是阻塞的。
- 同步I/O操作导致请求进程阻塞,直到I/O操作完成
- 异步I/O不导致请求进程阻塞
参考资料:
UNP 卷1
分享到:
相关推荐
WinSock 异步IO模型WinSock 异步IO模型
幽默Socket+IO模型.doc幽默Socket+IO模型.doc
主要使用控制台程序,大致讲叙了IO模型的相关步骤以及实现C/S模型,适合初学者查看
4种IO模型编程实例: 阻塞IO 无阻塞IO 多路复用IO 异步IO
Linux IO模型 epoll 多进程模型 Socket
windows socket 五种IO模型-代码全攻略
Windows socket 编程的模式详解以及基于模式的IO模型详解。这些模型包括s e l e c t(选择)、W S A A s y n c S e l e c t(异步选择)、W S A E v e n t S e l e c t(事件选择)、Overlapped I/O(重叠式I / O)...
Windows Socket五种IO模型——代码全攻略
linux io模型,区分阻塞非阻塞同步异步的概念,从底层理解io。
介绍了五种IO模型,可以快速了解IO模型相关基础知识点
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置...
windows网络socket模型 异步通信模型 select模型 异步选择 异步事件 重叠IO 完成端口 详细介绍了区别 用法与实例
服务器并发处理能力+-+IO模型服务器并发处理能力+-+IO模型
Winsockt_IO模型Winsockt_IO模型Winsockt_IO模型Winsockt_IO模型Winsockt_IO模型Winsockt_IO模型Winsockt_IO模型
IO模型决定了数据的传输方式,Java支持BIO,NIO,AIO三种IO模型。BIO是同步阻塞模型,特点是一对一的客户端与处理线程关系,适用场景是连接数量较小并且固定的,优点是编程简单,但对服务器资源要求高。NIO是同步非...
帮助同学了解什么是WINSOCK IO模型,PPT里包含了好多相关网络应用与开发方面的知识!
几种网络编程模型 c++ winsock编程模型
IOCP模型作为高性能IO模型,线程本地内存池,文件缓存,分析模块。 ## 进度 1. IOCP模型: [x] AcceptEx接收数据 [x] DisconnectEx复用Sokcet [x] 消息循环 2. 内存池 [x] 16Bytes * [1-32] 的小块内存分配 ...
网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
重叠IO模型之OverLapped完成例程模型WSACompletionRoutineServer VS2010 基础入门 客户端与服务器端 客户端向服务器端发送数据 可接收多个客户端 #include #include #pragma comment (lib, "ws2_32.lib") #...