五种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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2020-12-29 JAVA设计模式之适配器模式