I/O处理五种模型

***  阻塞I/O模型

***  非阻塞I/O模型

***  I/O多路转接模型

***  信号驱动I/O模型

   

当数据报准备好的时候,内核会向应用程序发送一个信号,进程对信号进行捕捉,并且调用信号处理函数来获取数据报。

该模型分为两个阶段:

1.数据准备阶段:未阻塞,当数据准备完成之后,会主动的通知用户进程数据已经准备完成,对用户进程做一个回调。

2.数据拷贝阶段:阻塞用户进程,等待数据拷贝。

***  异步I/O模型

同步和异步是针对应用程序和内核交互而言的;

同步是用户进程触发IO操作并等待或轮询的去查看是否就绪;

异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知,这需要CPU支持。

类比一下,将异步I/O模型类比为叫外卖

此时科技已经非常发达,外卖机器人将外卖自动送达并转换成营养快速注入我的体内,同时还能得到口感的满足。

注入结束后,机器人会提醒我注入完毕。

在这个期间我可以放心大胆的做其他事情,甚至注射的时候也不需要停下来!

用户进程发起系统调用后,立刻就可以开始去做其他的事情,然后直到I/O数据准备好并复制完成后,内核会给用户进程发送通知,告诉用户进程操作已经完成了

1.异步I/O执行的两个阶段都不会阻塞读写操作,由内核完成。

2.完成后内核将数据放到指定的缓冲区,通知应用程序来取。

小实验

非阻塞小实验 - 思路

* 使用open打开文件时,设置O_NONBLOCK文件状态标志。

* 对于已经打开的文件, 则使用fcntl系统调用来修改其文件状态标志。

.

最新文章

  1. odoo种种
  2. 朴素贝叶斯算法下的情感分析——C#编程实现
  3. 获取documents、tmp、app、Library的路径的方法
  4. [Dynamic Language] 用Sphinx自动生成python代码注释文档
  5. .Net Web项目安装包制作 (一)
  6. NTKO Officecontrol在线Word编辑器的使用
  7. Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统)
  8. hdu 1022 Train Problem I 解题报告
  9. MySQL主备停机步骤与注意事项
  10. AsyncTask下载网络图片
  11. mysql中不同事务隔离级别下数据的显示效果--转载
  12. js实现键盘操作对div的移动或改变-------Day43
  13. Dropbox 用什么语言开发的?(Python在各个平台都是全能的,特别是有PyObjC真没想到)
  14. 【SICP感应】1 工艺和替代模式
  15. cddiv/数组维护
  16. mysql5.6 主从复制
  17. Objective-C与Java类的一些区别
  18. 筛选最小值---verilog
  19. codeforces439B
  20. 数据正规化 (data normalization) 的原理及实现 (Python sklearn)

热门文章

  1. 避免nullpointer 空指针
  2. 关于`ClawHub的技术分享`公众号
  3. iptables防火墙说明即使用
  4. Iterator泛型指针
  5. 自定义AQS独占模式下的同步器来实现独享锁
  6. oracle数据处理之逻辑备份与恢复
  7. loadrunner跑场景时报错Full MDB file. New error messages will be ignored
  8. [LeetCode]621. 任务调度器(贪心)
  9. Scala的递归函数应用
  10. JS中call()、apply()、bind()的用法