作者:廊坊0316慢摇酒吧_196 | 来源:互联网 | 2023-06-07 17:28
这两天在复习网络编程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:消息拷贝完了再发出通知
几种模式的比较: