脑壳短路的一瞬间,黑人问号?

在这个问题之前,我们先了解下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。

写到这里我的脑子突然冒出个问题:怎么定义非阻塞?怎么定义阻塞?跑远了......其实越想越觉得上面写的有问题,在想想......

最新文章

  1. Nodejs 的 Express框架 学习体会 补充中。。。
  2. HBase 实战(2)--时间序列检索和面检索的应用场景实战
  3. [CareerCup] 8.3 Musical Jukebox 点唱机
  4. hdu 3948 Portal (kusral+离线)
  5. synopsys license maker
  6. head First HTML与CSS读书笔记
  7. JDBC框架
  8. Hive 安装过程中的问题
  9. spring 发邮件
  10. 机器学习基石笔记:01 The Learning Problem
  11. zabbix4.0监控Mysql数据库
  12. post推送消息时的乱码
  13. HDOJ 5666//快速积,推公式
  14. nginx配置url中带问号的rewrite跳转
  15. private static final Logger logger= LoggerFactory.getLogger(WhMainBusi.class);
  16. 显示隐藏火车头快捷键Ctrl+t
  17. 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
  18. putty 、xshell的使用 和 putty 、xshell、 shell 间免密登陆
  19. 《算法》第四章部分程序 part 19
  20. vs2010 :0X80041FEB 程序集无法修改版等内容

热门文章

  1. vue上传大文件的解决方案
  2. luogu 3047 [USACO12FEB]附近的牛Nearby Cows 树形dp
  3. ZurmoCRM 可执行代码高危风险报告及修复
  4. 在iOS开发中使用icon font的方法
  5. JS高级_变量提升和函数提升
  6. tensorflow feeddict问题unhashable type: 'numpy.ndarray'
  7. MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例
  8. 11 MySQL之性能优化
  9. 数据分析 - Excel 函数, 技巧, 分析工具
  10. H5和原生APP之间的区别