Linux下,可以通过设置socket使其变为non-blocking。

当对一个non-blocking socket执行读操作时,流程是这个样子:


从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。

用户进程判断结果是一个error时,它就知道数据还没有准备好,于是用户就可以在本次到下次再发起read询问的时间间隔内做其他事情,或者直接再次发送read操作。

一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存(这一阶段仍然是阻塞的),然后返回。

也就是说非阻塞的recvform系统调用调用之后,进程并没有被阻塞,内核马上返回给进程,如果数据还没准备好,此时会返回一个error。

进程在返回之后,可以干点别的事情,然后再发起recvform系统调用。

重复上面的过程,循环往复的进行recvform系统调用。

这个过程通常被称之为轮询。

轮询检查内核数据,直到数据准备好,再拷贝数据到进程,进行数据处理。

需要注意&#

7.3.2 非阻塞IO(non-blocking IO)相关推荐

  1. python复制文件夹不阻塞_Python学习第54天(阻塞(blocking) IO和非阻塞(non-blocking)IO)...

    今天之所以这么早结束,主要是因为自己脑子不够用了,发现最近的定义有点多,完全搞不清楚了,打算早点睡觉,今天的内容估计要引用很多别人的部分了. 看到题目的四个东东是不是惊呆了,我也是惊呆了,同时脑子还跟 ...

  2. 7.3.1 阻塞IO(blocking IO)

    在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据. 对于 ...

  3. python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO

    Python-协程-阻塞IO-非阻塞IO-同步IO-异步IO 一.协程 协程又称为微线程 CPU 是无法识别协程的,只能识别是线程,协程是由开发人员自己控制的.协程可以在单线程下实现并发的效果(实际计 ...

  4. IO:同步,异步,阻塞,非阻塞

    IO - 同步,异步,阻塞,非阻塞 都是老生常谈的东西,多通读几遍,理解透彻! 实际上同步与异步是针对应用程序与内核的交互而言的.同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看 ...

  5. IO - 同步,异步,阻塞,非阻塞

    转自:http://blog.csdn.net/historyasamirror/article/details/5778378 同步(synchronous) IO和异步(asynchronous) ...

  6. 5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO

    目录 前言 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) 模型间的区别 ...

  7. linux5种IO模型以及同步异步,阻塞非阻塞

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  8. Linux IO - 同步,异步,阻塞,非阻塞

    From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...

  9. 阻塞和非阻塞IO,异步和同步IO

    从网上看到一遍比较好的博客介绍阻塞和非阻塞IO,异步和同步IO的区别和各自的使用场景,虽然是从网络套接字方面解析的,不过也是适合于对驱动文件的操作,毕竟套接字的本质也是一个文件描述符. 转载内容 本文 ...

  10. 文件异步io java,漫画图解java开发之IO阻塞、非阻塞、同步、异步

    周末在家加班,正在疯狂的撸代码,女朋友很开心的跑过来,手里拿着他刚刚画好的一副漫画. 同步.异步.阻塞.非阻塞都是和IO(输入输出)有关的概念.最简单的文件读取就是IO操作.而在文件读取这件事儿上,可 ...

最新文章

  1. c++中的基本知识点
  2. 图片旋转对于识别模式带来的变化
  3. CCF NOI1063 计算组合数
  4. SSY and JLBD 题解
  5. Inverse Pair
  6. 网络爬虫--22.【CrawlSpider实战】实现微信小程序社区爬虫
  7. LeetCode 93. 复原IP地址(回溯)
  8. python中闭包的作用_Python闭包及其作用域
  9. python app自动签到器_Python实现自动签到脚本功能
  10. 数学建模算法与应用(目录)
  11. SVM多分类器算法-一对多
  12. VMplayer创建虚拟机
  13. 微博数据采集的10个经典方法
  14. 8.4 Power Management
  15. ug冲模标准件库_UG NX插件
  16. html5设置图片为页面背景透明度,纯CSS设置图片半透明,DIV半透明,背景半透明的方法...
  17. .netcore入门2:深入理解.NET Core的基元: deps.json, runtimeconfig.json, dll文件
  18. MySQL数据库创建表一系列操作
  19. 每年的风能部署必须增长四倍,才能到2050年实现净零排放
  20. XDM-跨文档消息传送

热门文章

  1. unity, 非public变量需要加[SerializeField]才能序列化
  2. 高级系统项目管理师笔记1
  3. 老虞学GoLang笔记-数组和切片
  4. 充分感受中国缺少管理型软件人才的说法
  5. 安装Oracle9I出现加载数据库时出错:areasQueries错误,提示停止该组件或所有组件安装,之后安装不能进行...
  6. java链表交集并集,一个链表求集合并集交集的异常
  7. C语言简单题-求整数序列中出现次数最多的数
  8. php无法查询mysql字母,php – 无法在Multi MYSQL查询语句中获取结果
  9. android s静态广播,重走android(3)广播 · sk600’s Studio
  10. 2014届华为校园招聘机试题