网络编程 I/O模型

来源:互联网 发布:马刺常青 知乎 编辑:程序博客网 时间:2024/04/30 11:50

这两天在复习网络编程I/O模型,截几张图做笔记

I/O模型包括五种:1.阻塞IO  2.非阻塞IO  3.I/O多路复用  4.信号驱动I/O 5.异步I/O


1.阻塞I/O 


客户端或者服务器端的recvfrom()/read()之类的接收消息函数一直等带着数据的到来,没有数据到来九一直等,阻塞这个进程的运行,数据来了就返回,程序继续网下执行




2.非阻塞I/O


客户端或者服务器端的recvfrom()/read()之类的接收消息函数不管有没有消息都会以及返回,有消息的话就拷贝到用户空间。这种太消耗CPU资源了



3.I/O多路复用

利用select和poll函数实现多路复用,其实它也是阻塞的, 他和阻塞模式不同的是它可以监听多个连接,哪个连接的数据到了,它九返回那个连接的描述符,这样是不是高效很多了。


多路复用IO的好处,举个例子:




4.信号驱动I/O


注册一个信号处理函数,有数据就会发出一个信号,执行信号处理函数,类似于java中的接口回调,像OnClickListerner一样



5.异步I/O

异步I/O和信号驱动的区别

信号驱动I/O:消息来了,发出通知,然后再拷贝数据到用户空间

异步I/O:消息拷贝完了再发出通知



几种模式的比较:


1 0
原创粉丝点击