在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样:

当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。

对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来。

而在用户进程这边,整个进程会被阻塞。

当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。

所以,blocking IO的特点就是在IO执行的两个阶段(等待数据和拷贝数据两个阶段)都被block了。

几乎所有的程序员第一次接触到的网络编程都是从listen()、send()、recv() 等接口开始的,使用这些接口可以很方便的构建服务器/客户机的模型。

然而大部分的socket接口都是阻塞型的。

所谓阻塞型接口是指系统调用(一般是IO接口)不返回调用结果并让当前线程一直阻塞只有当该系统调用获得结果或者超时出错时才返回。

7.3.1 阻塞IO(blocking IO)相关推荐

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

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

  2. 关于Blocking IO, Non-Blocking IO 和 Asynchronous I/O的理解

    文章写得很详细很清楚了,对我的理解帮助很大. 转载自:http://www.cnblogs.com/whyandinside/archive/2012/03/04/2379234.html. 概括来说 ...

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

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

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

    阻塞IO, 非阻塞IO, 同步IO,异步IO 介绍 先说明几个概念 用户空间与内核空间 为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间(内存)划分为两部分,一部分 ...

  5. [转]关于Blocking IO, Non-Blocking IO 和 Asynchronous I/O的理解

    ---恢复内容开始--- 关于Blocking IO, Non-Blocking IO 和 Asynchronous I/O的理解 概括来说,一个IO操作可以分为两个部分:发出请求.结果完成.如果从发 ...

  6. NIO模型(Non Blocking IO)

    NIO模型(Non Blocking IO) 1.什么是NIO 2.NIO初始版本示例代码 2.1.服务端代码 2.2.客户端测试 2.3.原始版本出现的问题 3.NIO引入多路复用器 3.1.什么是 ...

  7. node - 非阻塞的异步 IO

    node - 非阻塞的异步 IO 每当我们提起 node.js 时总会脱口而出 事件驱动.非阻塞I/O 和 单线程,所以我总结了以下几点对这三项概念的阐述,不一定正确仅仅代表个人观点. 单线程 当一个 ...

  8. 高级IO--1 ---(五种典型IO,阻塞IO,非阻塞IO,信号驱动IO,异步IO, IO多路转接)

    高级IO: 五种典型IO: 阻塞IO/非阻塞IO/信号驱动IO/异步IO/IO多路转接 IO多路转接模型:select/poll/epoll 五种典型IO 阻塞IO IO操作的流程:等待IO操作条件具 ...

  9. IO复用\阻塞IO\非阻塞IO\同步IO\异步IO

    本文是对<UNIX网络编程卷1>第6章的总结. 一.            什么是IO复用? 它是内核提供的一种同时监控多个文件描述符状态改变的一种能力:例如当进程需要操作多个IO相关描述 ...

最新文章

  1. tensorflow 教程 梯度下降法实现线性回归问题
  2. 圆你“鸟人”梦,全身VR模拟飞行器Birdly带你飞
  3. w10系统没有打开方式_小白怎么制作微软官方win10系统安装启动U盘
  4. mysql phpmyadmin 修改下一个自增值的开始位置 计数重置
  5. 57 第一个Celery程序
  6. 博客暂停通知-------10.1~11.24
  7. LeetCode之Search Insert Position
  8. OpenCV的数据类型——辅助对象
  9. 模板引擎thymeleaf和freemarker
  10. java学习代码01 范围:基本测试、标识符、数据类型、运算符、控制语句
  11. 2012年度总结:内心宁静的2012
  12. 02 AC-DC整流器(AC Rectifer)简介
  13. 日本一年中的重要节日及活动
  14. Ceph 认证授权和RBD块存储、对象存储使用(三)
  15. 动态规划之扔鸡蛋(或手机)问题
  16. Win8系统hiberfil.sys是什么文件?Win8系统hiberfil.sys怎么删除?
  17. MYSQL之慢SQL
  18. 对于网站设计和开发公司日益增长的需求
  19. 密立根油滴实验科大奥瑞计算代码
  20. notepad++设置网络代理

热门文章

  1. html div转换图片
  2. nodeJs配置相关以及JSON.parse
  3. ubuntu16.04下安装emacs
  4. 最常用的ES6特性(转)
  5. DataUml Design 教程6-DataUML Design 1.1版本号正式公布(支持PD数据模型)
  6. python with用法
  7. 现在编程语言的两大主流
  8. * 图形例子,函数实现体会地址传递
  9. unity调用python脚本_Unity3d中C#脚本调用另一个C#脚本的方法
  10. 今日头条适配方案_今日头条信息流广告创意优化方案!