根据应用程序是否阻塞自身运行分为:
阻塞I/O:是指应用程序在执行I/O操作后,如果没有获得响应,
         就会阻塞当前线程,不能执行其他任务。
非阻塞I/O:是指应用程序在执行I/O操作后,不会阻塞当前线程,
           可以继续执行其他的任务
根据I/O响应方式的不同,可分为:
同步I/O:指收到I/O请求后,系统不会立刻响应应用程序,等到处理完成,系统
         才会通过系统调用的方式,告诉应用程序I/O的结果。
异步I/O:指收到I/O请求后,系统会先告诉应用程序I/O请求已经收到,随后去异步
         处理,等处理完成后,系统在通过事件通知的方式,告诉应用程序结果
        
阻塞,非阻塞和同步异步其实就是两个不同角度的I/O划分方式,它们描述的对象也不同;

阻塞非阻塞针对的是io调用者(即应用程序),而同步异步针对的是io执行者(即系统)。

举例如下:
同步异步
系统调用 read 是同步读,所以,在没有得到磁盘数据前,read 不会响应应用程序。
而 aio_read 是异步读,系统收到 AIO 读请求后不等处理就返回了,而具体的 read 结果,
再通过回调异步通知应用程序。

阻塞非阻塞
使用 send() 直接向套接字发送数据时,如果套接字没有设置 O_NONBLOCK 标识,
那么 send() 操作就会一直阻塞,当前线程也没法去做其他事情。
当然,如果你用了 epoll,系统会告诉你这个套接字的状态,那就可以用非阻塞的方式使用。
当这个套接字不可写的时候,你可以去做其他事情,比如读写其他套接字。

转载自:极客时间专栏。

最新文章

  1. Windows一些零碎
  2. 构建seajs业务模块之grunt VS spm build
  3. 用js控制选项卡的隐藏与显示
  4. openstack的控制节点部署
  5. 【每日scrum】NO.2
  6. jQuery:balloon气泡提示插件
  7. C++描述基础算法之直接插入排序
  8. (转载)让ie6也支持max-width,和max-height实现图片等比例缩放
  9. EJS模板引擎
  10. 安全扫描工具 Netsparker
  11. [Swift]LeetCode376. 摆动序列 | Wiggle Subsequence
  12. asp.net通过distinct过滤集合(list)中重复项的办法
  13. python基础题型一
  14. 快速切题 poj2488 A Knight's Journey
  15. 利用python 下paramiko模块无密码登录
  16. spark总结——转载
  17. bzip2 --安装
  18. LightOJ1214 Large Division 基础数论+同余定理
  19. 雅虎天气API调用
  20. Python编程-面向对象和类

热门文章

  1. 学习Java Day 5
  2. bat脚本登陆ftp服务器
  3. SPA路由实现的基本原理
  4. Training Spiking Neural Networks with Local Tandem Learning
  5. 跳板攻击之:frp代理转发
  6. MyBatis 查询的条目与预期的不一致
  7. 推荐系统[八]算法实践总结V2:排序学习框架(特征提取标签获取方式)以及京东推荐算法精排技术实战
  8. SAP NOTE 489676 VF188异常
  9. 关于fetch请求中非表单模式(form)转化为form格式请求成功问题
  10. linux 替换csv的换行符(Linux 替换^M字符 方法)