http://www.cnblogs.com/Fly-Wind/p/io.html

http://blog.csdn.net/historyasamirror/article/details/5778378

经过上面的介绍,会发现non-blocking IO和asynchronous IO的区别还是很明显的。在non-blocking IO中,虽然进程大部分时间都不会被block,但是它仍然要求进程去主动的check,并且当数据准备完成以后,也需要进程主动的再次调用recvfrom来将数据拷贝到用户内存。而asynchronous IO则完全不同。它就像是用户进程将整个IO操作交给了他人(kernel)完成,然后他人做完后发信号通知。在此期间,用户进程不需要去检查IO操作的状态,也不需要主动的去拷贝数据。

总算是把block和同步异步这两个概念理清楚了,读完之后个人的一点总结:判断是否是block的依据是用户进程是否block在等待数据阶段,判断是同步还是异步的依据是把数据从内核态复制到用户态是内核主动还是用户进程主动。

先给楼主点个赞,辛苦了。对于同步的异步理解起来还是比较容易,就和使用js里面的AJAX时是一个道理,但是对于阻塞和非阻塞理解起来稍微有点困难,我看了几遍结合自己的理解说一下,所谓的阻塞和非阻塞是操作系统中的一个定义,如果是阻塞式的IO,那么操作系统会将这个IO操作所在的进程或者线程进行阻塞,夺去它的CPU执行权,而非阻塞式的IO由于在读的过程中一直有信息反馈,所以我需要用一个轮询去判断是否真的读取完毕,所以操作系统不会夺去它的CPU执行权。从另一个角度来说的话阻塞式IO可能会造成频繁的上下文切换,而非阻塞式IO会占用CPU时间过长,是一种CPu的浪费。

To 楼主:select/epoll是不好和多线程简单比较优势的。这个里面有很多原因。多线程编码复杂,debug相对比较困难。linux历史上线程的性能不是太好(相对其他OS上的线程)。为了降低多线程编码维护的复杂度,linux里是鼓励多用IO multiplexing的。可以看看X server(使用的IO multiplexing)的性能如何。

回复hit_fantasy: 个人理解,希望对你有帮助(当然可能有误):异步有一个很明显的特征,就是内核向用户层发送读成功的“消息”(用户进程只有一个启动io系统调用,之后去忙其他事情,内核完成拷贝后通过消息向该进程说“搞定了”)。而非异步的操作,需要程序自己通过系统调用去告诉内核接下来做什么(1.select 获取可读的fd,2,read 将数据从内核层拷贝到用户层)

最新文章

  1. JAVA中的异常及处理异常的方法
  2. 剑指offer二:替换空格
  3. java微信开发(wechat4j)——wechat4j配置文件解读
  4. 按Right-BICEP要求的任务二的测试
  5. 360兼容模式==ie8 兼容模式下 span标签占位问题
  6. 应用数据存储到sdcard上一定要规范,android4.4.2有新规范
  7. radio组件
  8. Process 'command '/usr/lib/jvm/jdk1.8.0_25/bin/java'' finished with non-zero exit value 2
  9. python3.6+selenium3.13 自动化测试项目实战一(增加自动发送邮件报告接口)
  10. 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试
  11. Mysql概念及基本操作
  12. c# word interop encrypt with password protect with password
  13. jQuery 新添加元素事件绑定无效
  14. springboot之定时任务
  15. 微软职位内部推荐-Senior SW Engineer for Application Ecosystem
  16. Ionic slides 轮播图
  17. Alamofire源码导读三:返回的处理逻辑
  18. ubuntu下以16进制形式查看class文件、反编译class文件
  19. 归纳整理Linux下C语言常用的库函数----内存及字符串控制及操作
  20. Codeforces Round #540 (Div. 3) 部分题解

热门文章

  1. Android:数据存储之SQLite
  2. [iOS]修改开发者中心Bundle Identifier的一些配置
  3. netty 解决TCP粘包与拆包问题(三)
  4. js、javascript正则表达式验证身份证号码
  5. Struts2的简单案例
  6. C语言中的宏展开
  7. fiddler for mac
  8. 查看Linux服务器网络状态
  9. HDU 1698 Just a Hook (线段树 成段更新 lazy-tag思想)
  10. MasterPage的自身Bug还是?