两个应用数据交互流程,应用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
标签:缓存,请求,模型,五种,线程,IO,fd,数据 From: https://www.cnblogs.com/zhougongjin/p/17013482.html