阻塞与非阻塞,同步与异步
这个问题其实也是老生长谈。
首先给给出阻塞与非阻塞的概念。
阻塞是说:当一个用户进程向内核系统调用读写请求的时候,数据没准备好,或者内存不为空的时候。用户进程将会等待,直到内核准备好。
然后结束请求,返回用户进程,如果系统调用一直没有返回则用户进程死等(阻塞)。
非阻塞是说:当一个用户进程向内核系统调用读写请求的时候,数据没准备好,或者内存不为空的时候。则系统调用返回错误号,用户进程去执行别的事情,过一会用户进程再来发出相同的读写请求,直到读写系统调用完成或者退出,这个过程可能会持续好多次。
I/O复用是说select和poll系统调用可以同时监控多路读写事件的状态。而I/O信号驱动则是说当I/O条件准备好的时候,用一个SIGIO信号通知用户进程,该进程处理的I/O时间至少有一个准备好。
异步I/O是说,用户进程直接系统调用(aio_read等),有内核进城去处理数据IO,如果数据准备好,内核进程还要把数据拷贝到用户进程,然后通知用户进程,用户进程按照设定的入口函数,去处理异步调用结果,它的异步请求已完成。
综上所述,上诉四种阻塞、非阻塞、I/O复用、I/O信号驱动,都属于同步I/O。
只有最后一种异步I/O。才是异步IO.
阻塞与非阻塞是说用户进程同步IO时的情况方式。
而异步是说,用户进程根本就不关心IO的问题,只是简单地把读写操作扔给内核,自己就不管了,如果异步IO完成了,则内核会给用户进程一个信号,调用相应的处理函数。
参考文献: W.richards stevens UNIN networks programming 第六章,6.1,6.2节。
分享到:
相关推荐
同步异步阻塞非阻塞
异步、同步、阻塞、非阻塞的说明和解释,用于深入理解。
主要介绍了详解socket阻塞与非阻塞,同步与异步、I/O模型,socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别,本文将详细讲诉。
聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞
tcp socket同步 异步 阻塞 非阻塞 的解释.zip 基本概念:同步、异步、阻塞和非阻塞的区别 同步异步与阻塞非阻塞的区别 C++ 同步异步与阻塞非阻塞的区别
本文主要讲了IO中同步、异步与阻塞、非阻塞的区别。希望对你的学习有所帮助。
讲述同步、异步、阻塞、非阻塞的区别,通俗易懂,是我见到的最口语话最清晰的材料,文中比喻恰当,深入浅出。
本文档,是我本人翻译的一篇介绍linux系统同步异步阻塞非阻塞的知识的,你在网上看到的百分之八十的知识,可能都以讹传讹,让你看的一知半解,因为网上很多该类博客,没有讲解清楚,举得例子:如老王烧水,小王银行...
阻塞非阻塞异步同步笔记1
java 同步、异步、阻塞和非阻塞分析.docx
这篇文章里,简单而且形象的介绍了同步于异步——阻塞与非阻塞的知识。希望可以帮助大家
用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制
在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。...
主要介绍了java 中同步、异步、阻塞和非阻塞区别详解的相关资料,需要的朋友可以参考下
同步异步,阻塞非阻塞,I/O学习总结的思维导图,需要结合Richard Stevens的书来学习
怎样理解阻塞非阻塞与同步异步的区别最近在使用shell_exec去执行一个php脚本时,出现了进行阻塞情况(数据量大,需要等待进行执行结果,时间耗费太长)。于是
网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
2.3 epoll_wait函数函数声明:int epoll_wait(int epfd, struct epoll_event events, int max
异步非阻塞串口通讯的实现步骤一,异步非阻塞串口通讯的优点读写串行口时,既可以同步执行,也可以重叠(异步)执行。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降...