阻塞非阻塞与异步同步问题
来源:互联网 发布:java软件开发培训机构 编辑:程序博客网 时间:2024/05/13 09:52
通常IO操作分为两个步骤:(1)IO请求 (2)实际的IO操作
阻塞和非阻塞的区别是发生在(1)过程中的,发生在内核中。同步异步的区别是发生在(2)过程中的。发生在应用程序与内核的交互中。
如下面的图所示阻塞非阻塞得区别发生在等待数据的那个阶段,而将数据从内核空间复制到用户空间的阶段是相同的。
阻塞:应用程序请求IO操作的时候,如果数据没有准备好,请求不即刻返回。可以看到在等待数据阶段没有立即返回。
非阻塞:应用程序请求IO操作时,如果数据没有准备好,请求立即返回。如图在等待数据阶段会立即返回。
同步:在实际IO操作中进程触发IO操作,并且等待或者轮询的去查看IO操作是否完成。如同异步的图,只是在将数据从内核复制到用户空间过程中进程要么等待,要不就轮询问内核IO操作是否完成。
异步:在实际IO操作中进程触发IO操作,进程直接返回做自己的事,IO交由内核处理,IO操作完成后内核通知进程IO完成。
自己理解的总结:
同步异步讨论的是消息如何通知的机制,同步情况下,由处理消息者自己去等待消息是否被触发完成,而异步是由触发机制通知给处理消息者。
阻塞非阻塞讨论的是等待消息时的状态。阻塞就是等待中不干别的事,非阻塞就是程序在此期间可以做别的事,所以阻塞非阻塞与同步异步无关,两者可以结合使用。
0 0
- 阻塞非阻塞与异步同步问题
- 同步与异步,阻塞与非阻塞
- 同步与异步,阻塞与非阻塞
- 阻塞与非阻塞,同步与异步
- 同步与异步,阻塞与非阻塞
- 同步与异步 阻塞与非阻塞
- 同步与异步 阻塞与非阻塞
- 同步与异步,阻塞与非阻塞
- 阻塞与非阻塞 同步与异步
- 阻塞与非阻塞 同步与异步
- 阻塞与非阻塞,同步与异步
- 同步与异步、阻塞与非阻塞
- 同步与异步、阻塞与非阻塞
- 同步与异步、阻塞与非阻塞
- 异步与同步&&阻塞与非阻塞
- 同步与异步、阻塞与非阻塞
- 同步与异步 阻塞与非阻塞
- 阻塞与非阻塞-同步与异步
- 修改HTML元素
- CodeForces 21 D Traveling Graph
- 为什么蠢货才能在澳大利亚生存
- 一个关于时间的静态变量的应用
- 2016蓝桥杯B组——NO.3
- 阻塞非阻塞与异步同步问题
- webservice报错NullPointerException的解决方法
- config a writable directory on apache
- Protege初学者
- django + uwsgi + nginx 配置
- spring注解 repository,component,service,controller
- 链表-Linked List Cycle II(判断一个链表是否有环)
- Ubuntu下DHCP服务器安装与配置
- nyoj139