i/o通信模型

                      Linux I/O通信模型总结

1)阻塞模型

2)非阻塞模型

3I/0多路复用

4)信号量驱动I/0

5)异步I/0

 

阻塞模型

175118_Tg3r_927090.png

 

如上图所示,函数一直等待数据准备好,如果没有数据准备好,就一直阻塞,有数据到来,再把数据拷贝到应用层。这种i/o模型是最简单的但是很少在实际应用中使用。

 

非阻塞模型

175143_DUjF_927090.png

 

如果该缓冲区没有数据的话,就直接给我返回,并且返回一个EWOULDBLOCK错误,一般都对非阻塞I/O模型进行轮询,就是一直在检查这个状态,看内核是不是有数据到来调用

多路复用模型

175213_Bbhp_927090.png

 

这种模型是现在最长用的(select poll epoll), 可以同时监听若干个fd,并根据fd状态变化做出相应响应。

 

信号驱动

175246_YDQM_927090.png

 

异步模型

175257_37dY_927090.png

 

 

 

 

以上就是5i/o 通信模型,最后一种应用很少,信号驱动我也没有实际应用过。

再实际的应用当中,肯定要和线程池,连接池等结合起来。

 

 

前四种模型均是同步的

 

同步异步概念上比较混乱,有些人喜欢将多路复用也认为是异步的。但是我认为,前四种应该都是同步的。(都需要等待数据从内核态拷贝到用户态,这个过程是阻塞的)。我认为,有些人认为是异步的应该是从请求处理并不是串行的返回这个角度说的,要是这样第二种模型配合多线程也是异步的了,不用纠结于概念吧

 

同步非阻塞多路复用应该是最常用的网络模型。

 

 

 

 

 

有趣有爱有价值:http://www.qihu100.com

转载于:https://my.oschina.net/hejiula/blog/205137

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值