首页 > 其他分享 >五种IO模型

五种IO模型

时间:2022-12-29 20:47:10浏览次数:60  
标签:缓存 请求 模型 五种 线程 IO fd 数据

两个应用数据交互流程,应用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

相关文章

  • linux下搭建nagios
    环境准备yuminstall-yhttpdphpgccglibcglibc-commongdgd-develmakenet-snmp创建Nagios用户和Nagcmd组useraddnagios&&groupaddnagcmd加入nagios和a......
  • dremio UserServer 简单说明
    UserServer目的是对于UserRPCServer进行生命周期管理(基于netty开发的)主要是处理非web请求(实际上就是直接链接的服务)从官方源码上UserServer的创建只能在协调节点(当......
  • dremio 参考配置参考
    实际上我以前简单说明过,下边包含一个官方文档完整的,方便参数学习官方提供的参考配置dremio-reference.confincludeclasspath("dremio-reference-ext.conf")......
  • dremio jdbc 客户端简单说明
    dremiojdbc客户端实际上包含了基本上两大类,一个是传统jdbc的,一个是基于apachearrowflightsqljdbc的当前主要说明传统jdbc客户端的,内部上dremio基于了calcite......
  • go语言的控制反转 (IOC)在工程中应用
    背景最近在总结现有框架中一些比较有亮点的地方,个人觉得带着问题去学习是比较高效的事情,所以把一些学习总结记录下来。IoC是一种设计原理,比较常见于面向对象的设计中反转......
  • 存储机制(Window.sessionStorage 和 Window.locaStorage)
    <!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>webStorage</title> <!-- 1.存储内容大小一般支持5MB左右(不同浏览器可能不一样) 2.浏览器通过Window.......
  • fiddler手机抓包遇到的问题-SecureClientPipeDirect failed: System.IO.IOException
    问题一:SecureClientPipeDirectfailed:System.IO.IOException无法从传输连接中读取数据:远程主机强迫关闭了一个现有的连接。系统:IOS原因:证书未被信任,导致主机拒绝......
  • parentComponent.ctx.deactivate is not a function
    vue3中使用keep-alive报错TypeError:parentComponent.ctx.deactivateisnotafunction代码:<router-view#default="{Component,route}"><keep-aliv......
  • MySQL 错误 CommunicationsException: Communications link failure
    一、环境数据库MySQL:5.7.39依赖mysql-connector-java:8.0.16二、错误启动项目,报如下错误:使用Navicat连接mysql服务器是没有问题的。三、原因MySQL5.5.45+......
  • Kubernetes 网络模型基础指南
    Kubernetes是为运行分布式集群而建立的,分布式系统的本质使得网络成为Kubernetes的核心和必要组成部分,了解Kubernetes网络模型可以使你能够正确运行、监控和排查应用程......