码迷,mamicode.com
首页 > 其他好文 > 详细

阻塞和非阻塞、同步和异步

时间:2018-11-08 14:22:44      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:完成   请求   strong   应用程序   工作   padding   情况   lis   默认   

阻塞IO:

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

技术分享图片

非阻塞式I/O

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

技术分享图片

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

技术分享图片

 

 

 

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

 

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

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

 

阻塞和非阻塞、同步和异步

标签:完成   请求   strong   应用程序   工作   padding   情况   lis   默认   

原文地址:https://www.cnblogs.com/Samuel1/p/9928615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!