五种IO模型

两个应用数据交互流程,应用A发送给应用B

1.A发送数据给tcp缓存区

2. A的tcp缓存区进过网络传输,把数据发送给B的缓存区

3. 应用B从缓存区读取数据

 

 

 

阻塞IO

第三个步骤,应用B发起接收数据请求的时候,可能Tcp缓存区还没有数据,就会等待。

 

非阻塞IO

第三个步骤,应用B发起接收数据请求的时候,可能Tcp缓存区还没有数据,直接返回失败。

 

复用IO

应用B可能要发起很多接收数据请求给TCP缓存,这样效率比较低而且对cpu的消耗也很大。

linux每个网络请求叫做fd,线程监控fd, 通过select不断轮询fd看有没有数据,等有数据再分配线程读取数据。

 

 

信号驱动IO

复用IO需要不断轮询,信号驱动IO不用轮询fd, 而是调用sigaction的时候建立sigio联系,当数据准备好了之后会发送消息通知线程,然后线程再发起获取数据的请求。

 

 

 

异步IO

信号驱动需要发送两次请求才能获取到数据,异步IO只需要发送一次请求,当有数据之后自动吧数据传给应用B

 参考:https://zhuanlan.zhihu.com/p/115912936

posted on 2022-12-29 20:31  周公  阅读(18)  评论(0编辑  收藏  举报

导航