非阻塞IO可以等同异步IO嘛?
2024-10-06 20:32:53
脑壳短路的一瞬间,黑人问号?
在这个问题之前,我们先了解下IO的过程,下图是异步IO,做个参照(图片随便找的,侵权联系小弟删除)
简单叙述下windows同步IO的流程(图片描述的是异步IO)
1、调用Read()方法时,线程从托管代码转换为本机/用户模式代码,Read内部调用Win32 ReadFile函数。
2、ReadFile分配一个小的数据结果,就是我们常说的I/O请求包(IRP 初始化后包含文件句柄、文件偏移量等信息)
3、ReadFile将线程从本机/用户模式代码变成本机/内核模式代码,向内核传递IRP数据,从而调用Windows内核
4、根据IRP中的设备句柄,windows内核将IRP传递给恰当的设备驱动程序的IRP队列(每个设备都维护着自己的IRP队列)
5、此刻硬件设备才开始执行请求的I/O操作。
在归类简述,IO分为两步:第一步是数据准备,第二步是数据复制阶段,所谓数据复制阶段就是将数据从内核空间复制到用户空间(对用户模式和内核模式不懂得,百度去)
上面铺垫那么多,其实结果大部分小伙伴都知道的:标题的问题是不成立的。非阻塞IO的非阻塞主要体现在IO的数据准备阶段,非阻塞IO会定时检查服务端的数据准备情况,这个阶段是非阻塞的。但是数据准备阶段一旦完成,线程就会阻塞进行的IO的第二步,即数据复制,所以非阻塞IO还是属于同步IO。
写到这里我的脑子突然冒出个问题:怎么定义非阻塞?怎么定义阻塞?跑远了......其实越想越觉得上面写的有问题,在想想......
最新文章
- Nodejs 的 Express框架 学习体会 补充中。。。
- HBase 实战(2)--时间序列检索和面检索的应用场景实战
- [CareerCup] 8.3 Musical Jukebox 点唱机
- hdu 3948 Portal (kusral+离线)
- synopsys license maker
- head First HTML与CSS读书笔记
- JDBC框架
- Hive 安装过程中的问题
- spring 发邮件
- 机器学习基石笔记:01 The Learning Problem
- zabbix4.0监控Mysql数据库
- post推送消息时的乱码
- HDOJ 5666//快速积,推公式
- nginx配置url中带问号的rewrite跳转
- private static final Logger logger= LoggerFactory.getLogger(WhMainBusi.class);
- 显示隐藏火车头快捷键Ctrl+t
- Hadoop---18/06/03 20:15:52 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable starting yarn daemons
- putty 、xshell的使用 和 putty 、xshell、 shell 间免密登陆
- 《算法》第四章部分程序 part 19
- vs2010 :0X80041FEB 程序集无法修改版等内容
热门文章
- vue上传大文件的解决方案
- luogu 3047 [USACO12FEB]附近的牛Nearby Cows 树形dp
- ZurmoCRM 可执行代码高危风险报告及修复
- 在iOS开发中使用icon font的方法
- JS高级_变量提升和函数提升
- tensorflow feeddict问题unhashable type: 'numpy.ndarray'
- MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例
- 11 MySQL之性能优化
- 数据分析 - Excel 函数, 技巧, 分析工具
- H5和原生APP之间的区别