博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tcpio5种io模型
阅读量:3698 次
发布时间:2019-05-21

本文共 624 字,大约阅读时间需要 2 分钟。

传智扫地僧课程学习笔记。

阻塞IO,

recv,接收数据,若没有,将阻塞,

当对方发数据来后,linux内核缓冲区得到数据,

内核数据复制到recv()调用所在的用户空间,

阻塞解除,进行下一步处理,

非阻塞IO,可以通过设置来实现,

轮询调用recv函数接收数据,

没有数据,立即返回,然后继续调用,

根据返回值来判定时候读到数据,

这种方式大量消耗CPU,应用范围小,一般和selectIO复用配合使用,

IO复用,

select机制,可以轮询多个fd的状态变化,

进而决定recv是否要进行数据的读,而不致像上面两种极端,

但是所轮询的多个fd都没有状态变化,也将阻塞,

同时select也可以设置等待时间,避免干等,

信号驱动IO,

建立一个信号,当有数据到来的时候,通知上层应用去读取数据,

这种模型用的较少,信号发送有延迟,处理数据有延迟,内核数据也可能发生变化,

异步IO,(这部分面试可能考,并且有必要再来回顾下)

一定要与信号驱动IO对比理解,

为什么说信号驱动的延迟大呢?

因为有数据了,得发送一个信号去通知上层应用,

通知之后,还不一定马上来读取,

有机会读取了,还得跑过来读,

而异步IO,上层应用提供了一个应用层的缓冲区,

有数据了,内核会主动,主动,主动,的把数据塞到应用层提供的这个缓冲区,而不用像上面那样有那么的工序去主动地读,不过这个复杂工序你暂时没办法了解很深入,但是可以肯定的是,主动读肯定涉及到很多过程处理,

转载地址:http://hlbcn.baihongyu.com/

你可能感兴趣的文章
JAVA如何计算字符串公式
查看>>
Java 实现 crc modbus 16 位校验算法
查看>>
Java工作中常用方法总结
查看>>
vue 项目修改 title 旁边的 icon 图片
查看>>
Jeecg-Boot前端图片更改(网站 title 图标修改)
查看>>
win10 安装 mysql5.7
查看>>
前端通过 v-html 或 js 都可以替换富文本中的标签
查看>>
vue 项目中使用原生 input type=“file“上传图片,限制上传大小,限制上传类型
查看>>
自定义注解通过反射实现Excel的导出功能(提供项目源码)
查看>>
SpringBoot + Ant Design Vue 实现 excel 导入功能
查看>>
vscode终端无法执行命令行
查看>>
史上功能最全的Java权限认证框架
查看>>
使用EasyPoi完成复杂一对多excel表格导出功能
查看>>
mybatis 中使用 CASE WHEN 关键字报错问题解决方案
查看>>
VsCode 常用插件
查看>>
CTF夺旗赛总结
查看>>
# java学习笔记 2020 1/17(二)慕课网 注释
查看>>
# java学习笔记 2020 1/19(四)慕课网 switch & 循环语句
查看>>
# java学习笔记 2020 1/19(八)慕课网 二维数组
查看>>
# java学习笔记 2020 2/7(九)慕课网 使用方法
查看>>