7.3.2 非阻塞IO(non-blocking IO)
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)相关推荐
- python复制文件夹不阻塞_Python学习第54天(阻塞(blocking) IO和非阻塞(non-blocking)IO)...
今天之所以这么早结束,主要是因为自己脑子不够用了,发现最近的定义有点多,完全搞不清楚了,打算早点睡觉,今天的内容估计要引用很多别人的部分了. 看到题目的四个东东是不是惊呆了,我也是惊呆了,同时脑子还跟 ...
- 7.3.1 阻塞IO(blocking IO)
在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据. 对于 ...
- python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
Python-协程-阻塞IO-非阻塞IO-同步IO-异步IO 一.协程 协程又称为微线程 CPU 是无法识别协程的,只能识别是线程,协程是由开发人员自己控制的.协程可以在单线程下实现并发的效果(实际计 ...
- IO:同步,异步,阻塞,非阻塞
IO - 同步,异步,阻塞,非阻塞 都是老生常谈的东西,多通读几遍,理解透彻! 实际上同步与异步是针对应用程序与内核的交互而言的.同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看 ...
- IO - 同步,异步,阻塞,非阻塞
转自:http://blog.csdn.net/historyasamirror/article/details/5778378 同步(synchronous) IO和异步(asynchronous) ...
- 5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO
目录 前言 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) 模型间的区别 ...
- linux5种IO模型以及同步异步,阻塞非阻塞
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- Linux IO - 同步,异步,阻塞,非阻塞
From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...
- 阻塞和非阻塞IO,异步和同步IO
从网上看到一遍比较好的博客介绍阻塞和非阻塞IO,异步和同步IO的区别和各自的使用场景,虽然是从网络套接字方面解析的,不过也是适合于对驱动文件的操作,毕竟套接字的本质也是一个文件描述符. 转载内容 本文 ...
- 文件异步io java,漫画图解java开发之IO阻塞、非阻塞、同步、异步
周末在家加班,正在疯狂的撸代码,女朋友很开心的跑过来,手里拿着他刚刚画好的一副漫画. 同步.异步.阻塞.非阻塞都是和IO(输入输出)有关的概念.最简单的文件读取就是IO操作.而在文件读取这件事儿上,可 ...
最新文章
- c++中的基本知识点
- 图片旋转对于识别模式带来的变化
- CCF NOI1063 计算组合数
- SSY and JLBD 题解
- Inverse Pair
- 网络爬虫--22.【CrawlSpider实战】实现微信小程序社区爬虫
- LeetCode 93. 复原IP地址(回溯)
- python中闭包的作用_Python闭包及其作用域
- python app自动签到器_Python实现自动签到脚本功能
- 数学建模算法与应用(目录)
- SVM多分类器算法-一对多
- VMplayer创建虚拟机
- 微博数据采集的10个经典方法
- 8.4 Power Management
- ug冲模标准件库_UG NX插件
- html5设置图片为页面背景透明度,纯CSS设置图片半透明,DIV半透明,背景半透明的方法...
- .netcore入门2:深入理解.NET Core的基元: deps.json, runtimeconfig.json, dll文件
- MySQL数据库创建表一系列操作
- 每年的风能部署必须增长四倍,才能到2050年实现净零排放
- XDM-跨文档消息传送
热门文章
- unity, 非public变量需要加[SerializeField]才能序列化
- 高级系统项目管理师笔记1
- 老虞学GoLang笔记-数组和切片
- 充分感受中国缺少管理型软件人才的说法
- 安装Oracle9I出现加载数据库时出错:areasQueries错误,提示停止该组件或所有组件安装,之后安装不能进行...
- java链表交集并集,一个链表求集合并集交集的异常
- C语言简单题-求整数序列中出现次数最多的数
- php无法查询mysql字母,php – 无法在Multi MYSQL查询语句中获取结果
- android s静态广播,重走android(3)广播 · sk600’s Studio
- 2014届华为校园招聘机试题