ZZIO模型– 同步和阻塞,异步和非阻塞的区别
2011-02-27 14:01
337 查看
在http://hi.baidu.com/deep_pro/blog/item/cf964b0ade9f4d1594ca6b1b.html
这些词之间的区别难倒了很多人,还有什么同步阻塞, 同步非阻塞, 异步阻塞, 异步非阻塞,乱七八糟的。
很多文章也想讲明白这个问题。著名且引起热议的有
http://www.ibm.com/developerworks/cn/linux/l-async/
http://www.cppblog.com/converse/archive/2009/05/13/82879.html
可是看了之后还是有点将信将疑,跑到图书馆翻了UNP 第一卷,不愧是圣经级别的著作,似有所悟。
UNP所述:
POSIX定义中,同步IO操作:IO操作将导致请求进程阻塞,直到IO操作完成。
异步IO操作:IO操作不导致请求进程阻塞
UNP中总结的IO模型有5种之多
阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,前四种都属于同步IO。
阻塞IO不必说了
非阻塞IO ,IO请求时加上O_NONBLOCK一类的标志位,立刻返回,IO没有就绪会返回错误,需要请求进程主动轮询不断发IO请求直到返回正确
IO复用同非阻塞IO本质一样,不过利用了新的select系统调用,由内核来负责本来是请求进程该做的轮询操作。看似比非阻塞IO还多了一个系统调用开销,不过因为可以支持多路IO,才算提高了效率
信号驱动IO,调用sigaltion系统调用,当内核中IO数据就绪时以SIGIO信号通知请求进程,请求进程再把数据从内核读入到用户空间,这一步是阻塞的。
异步IO,如定义所说,不会因为IO操作阻塞,IO操作全部完成才通知请求进程。
这样以来,同步和阻塞,异步和非阻塞就不会被混淆了,它们不是同一个方面上的概念,不能比较区别
同步和异步是只跟IO操作过程中进程的状态变化有关
阻塞和非阻塞就是进程的两种状态。
Unix下的五种I/O模型是:
阻塞I/O
非阻塞I/O
I/O复用(select 和poll)
信号驱动I/O
异步I/O
阻塞I/O模型图:
非阻塞IO模型图解:
IO复用模型图解:
信号驱动IO图解:
异步IO模型图解:
同步IO引起进程阻塞,直至IO操作完成。
异步IO不会引起进程阻塞。
IO复用是先通过select调用阻塞。
好了,上图已经解释的很清楚了,再来一张书中的综合图解:
以上这些应该解释的足够清楚了吧 ~~~
这些词之间的区别难倒了很多人,还有什么同步阻塞, 同步非阻塞, 异步阻塞, 异步非阻塞,乱七八糟的。
很多文章也想讲明白这个问题。著名且引起热议的有
http://www.ibm.com/developerworks/cn/linux/l-async/
http://www.cppblog.com/converse/archive/2009/05/13/82879.html
可是看了之后还是有点将信将疑,跑到图书馆翻了UNP 第一卷,不愧是圣经级别的著作,似有所悟。
UNP所述:
POSIX定义中,同步IO操作:IO操作将导致请求进程阻塞,直到IO操作完成。
异步IO操作:IO操作不导致请求进程阻塞
UNP中总结的IO模型有5种之多
阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,前四种都属于同步IO。
阻塞IO不必说了
非阻塞IO ,IO请求时加上O_NONBLOCK一类的标志位,立刻返回,IO没有就绪会返回错误,需要请求进程主动轮询不断发IO请求直到返回正确
IO复用同非阻塞IO本质一样,不过利用了新的select系统调用,由内核来负责本来是请求进程该做的轮询操作。看似比非阻塞IO还多了一个系统调用开销,不过因为可以支持多路IO,才算提高了效率
信号驱动IO,调用sigaltion系统调用,当内核中IO数据就绪时以SIGIO信号通知请求进程,请求进程再把数据从内核读入到用户空间,这一步是阻塞的。
异步IO,如定义所说,不会因为IO操作阻塞,IO操作全部完成才通知请求进程。
这样以来,同步和阻塞,异步和非阻塞就不会被混淆了,它们不是同一个方面上的概念,不能比较区别
同步和异步是只跟IO操作过程中进程的状态变化有关
阻塞和非阻塞就是进程的两种状态。
Unix下的五种I/O模型是:
阻塞I/O
非阻塞I/O
I/O复用(select 和poll)
信号驱动I/O
异步I/O
阻塞I/O模型图:
非阻塞IO模型图解:
IO复用模型图解:
信号驱动IO图解:
异步IO模型图解:
同步IO引起进程阻塞,直至IO操作完成。
异步IO不会引起进程阻塞。
IO复用是先通过select调用阻塞。
好了,上图已经解释的很清楚了,再来一张书中的综合图解:
以上这些应该解释的足够清楚了吧 ~~~
相关文章推荐
- 同步/异步与阻塞/非阻塞的区别消息
- IO中同步、异步与阻塞、非阻塞的区别
- socket阻塞,非阻塞,同步,异步的区别
- IO模型介绍以及同步异步阻塞非阻塞的区别
- 直击阻塞,非阻塞,异步,同步四者联系与区别
- IO中同步、异步与阻塞、非阻塞的区别
- 怎样理解阻塞非阻塞与同步异步的区别?
- 阻塞、非阻塞、同步、异步的概念区别
- 怎样理解阻塞非阻塞与同步异步的区别
- (转)同步/异步与阻塞/非阻塞的区别
- 深入理解同步/异步与阻塞/非阻塞区别 (转)
- 理解阻塞非阻塞与同步异步的区别
- 怎样理解阻塞非阻塞与同步异步的区别?
- 同步/异步与阻塞/非阻塞的区别
- 怎样理解阻塞非阻塞与同步异步的区别
- 怎样理解阻塞非阻塞与同步异步的区别?
- 怎样理解阻塞非阻塞与同步异步的区别?
- 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞区别和关系
- 并发 并行 同步 异步 多线程 阻塞 非阻塞的区别
- C++ 同步/异步与阻塞/非阻塞的区别