阻塞和非阻塞同步和异步

Posted samuel1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阻塞和非阻塞同步和异步相关的知识,希望对你有一定的参考价值。

阻塞IO:

默认情况下,所有的套接字都是阻塞的,对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所有等待分组到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用程序缓冲区。

技术分享图片

非阻塞式I/O

进程把一个套接字设置成非阻塞是在通知内核,当所请求的I/O操作非得把本进程投入睡眠才能完成时,不要把进程投入睡眠,而是返回一个错误。看看非阻塞的套接字的recvfrom操作如何进行

技术分享图片

异步I/O:这类函数的工作机制是告知内核启动某个操作,并让内核在整个操作(包括将数据从内核拷贝到用户空间)完成后通知我们。

技术分享图片

 

 

 

在数据从内核复制到应用缓冲区期间(用户空间),进程阻塞于recvfrom调用。

 

  • 阻塞,非阻塞:进程/线程要访问的数据是否就绪,进程/线程是否需要等待;

  • 同步,异步:访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞;异步只需要I/O操作完成的通知,并不主动读写数据,由操作系统内核完成数据的读写。

 

以上是关于阻塞和非阻塞同步和异步的主要内容,如果未能解决你的问题,请参考以下文章

同步异步阻塞和非阻塞

同步异步阻塞和非阻塞之间的区别

同步与异步并发和并行阻塞和非阻塞

阻塞和非阻塞,同步和异步

同步和异步以及阻塞和非阻塞

如何理解阻塞和非阻塞同步和异步