关于网络IO中的同步、异步、阻塞、非阻塞

  • 时间:
  • 浏览:0
  • 来源:uu快3APP_uu快3官方网址

为了除理block IO处在的大问题,就引入了no-blocking IO概念。

到目前为止,肯能将五个IO Model都介绍完了。现在回过头来回答最初的那多少大问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪。

在高并发编程当中,大家有另4个 劲会遇到一些异步、非阻塞等一些概念,一些常用的技术比如异步的httpclient、netty nio、nginx、node.js等,它们的原理大都跟异步、非阻塞有关。不怎么是在服务器开发中,并发的请求除理是个大问题,阻塞式的函数会愿因资源浪费和时间延迟。通过事件注册、异步函数,开发人员可不需用提高资源的利用率,性能也会改善。其nginx和node.js除理并发就有采用的事件驱动异步非阻塞模式。其中nginx中除理并发用的是epoll,poll,queue等法律方式,node.js使用的是libev,它们对大规模的HTTP请求除理的都很好。

经后后面 的介绍,会发现非阻塞IO和异步IO的区别还是很明显的。在非阻塞 IO中,其实任务管理器大帕累托图时间就有会被block,然后 它仍然要求任务管理器去主动的check,然后 当数据准备完成完后 ,也需用任务管理器主动的再次调用recvfrom来将数据拷贝到用户内存。而异步 IO则完全不同,它就像是用户任务管理器将整个IO操作交给了操作系统(内核)完成,然后 操作系统做完后 发信号通知。在此期间,用户任务管理器不需用去检查IO操作的状态,一些一些 需用主动的去拷贝数据。

由后面 的图示可知,采用多路模型会多一次系统调用select,肯能除理的连接数就有很高说说,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,肯能延迟还更大。select/epoll的优势并就有对于单个连接能除理得快一点 ,一些一些 在于能除理更多的连接。

大家所遇到的哪此场景大帕累托图就有当用户任务管理器(或任务管理器)在进行网络IO时即进行Socket读写时遇到的,一些一些本文讨论的上下文背景是基于Linux环境下的network IO。先介绍一下其中大家最常见的并就有IO:

在说明synchronous IO和asynchronous IO的区别完后 ,需用先给出两者的定义。Stevens给出的定义(其实是POSIX的定义)是有另4个 多多子的:

在这俩block IO的状态下,肯能请求的连接比较多,但其中大帕累托图就有阻塞的。肯能cpu的核数是有限的,一些一些一般的除理方案一些一些 每个cpu启用多个任务管理器来除理多个连接。这俩除理方案有很大的匮乏:

记住这两点不怎么要,肯能哪此IO Model的区别一些一些 在有另4个 多阶段上各有不同的状态。

IO multiplexing即IO多路复用,一些地方也称这俩IO法律方式为event driven IO(事件驱动IO)。它的基本原理一些一些 用通过操作系统提供的select/epoll等哪此函数不断的轮询所负责的所有socket,而就有让用户任务管理器买车人去轮询,注意这俩socket需用先设成异步的socket,当某个socket有数据到达了,就通知用户任务管理器。它的流程如图:



当用户任务管理器调用了select,这麼整个任务管理器会被block,而一齐,kernel会“监视”所有select负责的socket,当任何有另4个 多socket中的数据准备好了,select就会返回。这俩完后 用户任务管理器再调用read操作,将数据从kernel拷贝到用户任务管理器。这俩图和blocking IO的图其实并这麼不要 的不同,事实上,还更差一些。肯能这里需用使用有另4个 多system call (select 和 recvfrom),而blocking IO只调用了有另4个 多system call (recvfrom)。然后 ,用select的优势在于它可不需用一齐除理多个connection。

linux下的asynchronous IO其实用得很少。先看一下它的流程:



用户任务管理器发起read操作完后 ,立刻就可不需用后后现在开始去做其它的事。而买车人面,从kernel的淬硬层 ,当它受到有另4个 多asynchronous read完后 ,首先它会立刻返回,一些一些不需要对用户任务管理器产生任何block。然后 ,kernel会等候数据准备完成,然后 将数据拷贝到用户内存,当这俩切都完成完后 ,kernel会给用户任务管理器发送有另4个 多signal,告诉它read操作完成了。

在linux中,默认状态下所有的socket就有blocking,也一些一些 说大家的有另4个 任务管理器在进行IO操作时肯能这麼数据达到,这俩任务管理器是被阻塞的。有另4个 多典型的读操作流程为宜是有另4个 多多:

按照这俩定义,在网络IO层面,同步异步相对于阻塞非阻塞是有另4个 多更加宏观的概念,完后 所述的阻塞IO,非阻塞IO,IO多路复用都属于同步IO,肯能它们在内核copy数据阶段就有阻塞任务管理器。而异步IO则不一样,当任务管理器发起IO 操作完后 ,就直接返回再一些一些 理睬了,直到操作系统内核发送有另4个 多信号,告诉任务管理器说操作系统IO肯能完成,在这整个过程中,任务管理器完全这麼被阻塞。

肯能signal driven IO在实际中并不常用,一些一些我这只提及剩下的并就有IO Model。

这麼IO多路复用的优势在哪里呢,其实一些一些 在”多路复用”这俩词上。后面 也讲到了多路复用是指使用有另4个 任务管理器来检查多个Socket(也成文件描述符 )的就绪状态,比如调用select和epoll函数,传入多个文件描述符,肯能有另4个 多多文件描述符就绪,则返回,然后 阻塞直到超时。一些一些,在高并发的场景中,比如要除理500000个连接,只需用有另4个 任务管理器监控就绪状态,对就绪的每个连接开有另4个 任务管理器除理肯能直接丢到任务管理器除理,当然也可不需用用当前任务管理器除理,这麼这俩IO任务管理器可不需用一齐管理多个连接,也一些一些 多路复用了。

当用户任务管理器调用了recvfrom这俩系统调用,kernel就后后现在开始了IO的第有另4个 多阶段:准备数据。对于network io来说,一些一些完后 数据在一后后现在开始还这麼到达(比如,还这麼收到有另4个 多完全的UDP包),这俩完后 kernel就要等候足够的数据到来。而在用户任务管理器这边,整个任务管理器会被阻塞。当kernel有另4个 劲等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后 kernel返回结果,用户任务管理器才解除block的状态,重新运行起来。一些一些,blocking IO的特点一些一些 在IO执行的wait和copy有另4个 多阶段都被block了

no-blocking IO很简单,通过将socket设为非阻塞模式,这时,当你调用read时,肯能有数据就绪,就返回数据,肯能这麼数据就绪,就立刻返回有另4个 多错误,如EWOULDBLOCK。有另4个 多多是不需要阻塞任务管理器了,但这麼你还是要不断的轮询来读取或写入。当对有另4个 多non-blocking socket执行读操作时,流程是这俩样子:



从图中可不需用看出,当用户任务管理器发出read操作时,肯能kernel中的数据还这麼准备好,这麼它并不需要block用户任务管理器,一些一些 立刻返回有另4个 多error。从用户任务管理器淬硬层 讲 ,它发起有另4个 多read操作后,并不需用等候,一些一些 马上就得到了有另4个 多结果。用户任务管理器判断结果是有另4个 多error时,它就知道数据还这麼准备好,于是它可不需用再次发送read操作。一旦kernel中的数据准备好了,然后 又再次收到了用户任务管理器的system call,这麼它马上就将数据拷贝到了用户内存,然后 返回。

参考文档:http://blog.csdn.net/historyasamirror/article/details/5778378

然后 no-blocking IO也处在很大的匮乏,一些一些 IO任务管理器还是要不断的轮询socket来读取或写入, 于是,大家又引入了IO多路复用。

这麼到底哪此是异步、非阻塞,它们的原理是哪此,它们之间又有哪此区别呢?其实在一些一些状态下,异步是否阻塞(同步与阻塞)表示的是同有另4个 多意思,然后 在特定的上下文环境中,它们含义又十分不同。再具体讲它们的区别完后 ,先介绍一下上下文背景。

blocking vs non-blocking,这俩大问题很简单,前面的介绍中其实肯能很明确的说明了这两者的区别:

各个IO Model的比较如图所示:

从后面 介绍可不需用就看,blocking IO的特点一些一些 在IO执行的wait阶段是非阻塞的,然后 copy阶段还是阻塞的

再说一下IO处在时涉及的对象和步骤。对于有另4个 多network IO (这里大家以read举例),它会涉及到有另4个 多系统对象,有另4个 多是调用这俩IO的任务管理器(或任务管理器),有另4个 多多一些一些 系统内核(kernel)。当有另4个 多read操作处在时,它会经历有另4个 多阶段:

猜你喜欢

请各位高手相助!解决后追加1000分,绝不食言。FLASH和IEBOOK的问题。

换一换下载百度知道APP,抢鲜体验不得劲推荐你对你这种 回答的评价是?展开全版你这种 问题都在给分能出理 滴,你这种 问题是要给钱要能出理 滴。。。展开全版追问扫描

2020-02-25

求美国作家Pearl S. Buck简介(两三句即可)及其主要作品

获奖《生芦苇》(TheLivingReed)《北京来信》(LetterfromPeking)1935年,威廉·迪·豪威尔勋章《桥》(ABridgeforPassing)《帝国男

2020-02-25

2019阿里云双十一活动热门云服务器价格表

双十一的价格绝对是一年当中最低的,正可能性没人,什么都买车人,站长和企业主一定会取舍在这一 就让入手。都需要节省不少开销。可能性你是老用户说说,也都需要借用买车人家人,亲们

2020-02-24

周朝时期(包括春秋战国时期)的所有成语故事

展开全部扫描二维码下载展开全部本回答被前前男友采纳你对你这个回答的评价是?可选中2个 或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个间题。沉鱼落雁;一鸣惊人

2020-02-24

《倚楼听风雨》的下一句是?

下载百度知道APP,抢鲜体验倚楼听风雨,展开全部抛开名利淡,风雨可知愿?全诗是:携手归林远。换一换使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。风潜

2020-02-24