精华内容
下载资源
问答
  • 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞先验知识此处的异步指的是什么同步、异步、阻塞、非阻塞同步阻塞、同步非阻塞、异步阻塞、异步非阻塞一个生动的例子 先验知识   在解释这几个概念之前,需要注意的是:...

    先验知识

      在解释这几个概念之前,需要注意的是:

    • 首先需要知道原始的进程之间的同步、异步、阻塞这几个概念的含义。关于这方面的内容,可见笔者的另一篇博客: 同步与异步、并行与并发、阻塞与挂起:https://blog.csdn.net/wangpaiblog/article/details/116114098

    • 有人喜欢对“同步阻塞、同步非阻塞、异步阻塞、异步非阻塞”的概念,首先区分发送方和接收方,但实际上,无论是发送还是接收,本质上都是一种“查询”的过程,如果不在操作系统层面进行分析,区分这两者实无必要。

    • 同步阻塞、同步非阻塞中的“同步”与我们平常单独使用的进程之间的“同步”,不是同一个意思。“异步”一词也如此。稍后将解释其中的缘由。如果不加以说明,则本文中的“同步”、“异步”都指是这个

    • 同步、异步是针对两个任务(此任务不同于操作系统理论中的作业、进程等,指的只是一个线程中要做的一件事情。本文中的任务都指的是这个。)来说的,其中一个任务为一开始就在执行、所主要关注的,称为主任务,而另一个是与主任务相关的一个任务,称为相关任务。当主任务与相关任务分别位于不同的线程时,称该线程分别为主线程、相关线程。

    • 阻塞是针对主任务所在的线程来说的。当主任务和相关任务位于同一个线程时,不存在“阻塞”,即此情况下不存在同步阻塞、异步阻塞。

      但对于下面的情况,主任务和相关任务一定位于不同的线程:

      • 主任务发起的是 I/O 请求

      • 主任务发起的是网络请求

    • 请求是一个期望获得资源的行为,而“同步阻塞、同步非阻塞、异步阻塞、异步非阻塞”描述的是获得期望资源之前的行为,而不是其之后的行为。这四个概念中的“阻塞”不描述在获得资源之后主线程的程序走向。

    此处的异步指的是什么

      首先需要明白,无论是对“异步”还是“非阻塞”的主线程,都不可能凭空接收到外界、执行没有事先设置的程序。而之所以主线程的行为会受到相关线程的影响,是因为主线程会周期性地调用一种“查询”函数,而此“查询”函数的行为会受相关线程的影响。

      其次,对于操作系统,只要其启动,就一直在运行程序。如果没有显式的进程,就运行一个默认的空进程。而实际上,编程人员不可能能事先预计操作系统的运行时间,然后编写一个运行时间与操作系统工作时间正好相等的一种任务。这就是说,线程在执行时,实际上是在无限循环(周期性)地执行一系列任务。于是,可以在每个任务之间插入一个中断点,用于执行额外的操作(任务),以实现对其它线程的交互,这就是异步操作。理由是,中断点之前的任务都已经完成,而任务之间本是不应有任务的(因为任务之间的部分属于空档,没有任何东西),因此,任务之间的中断点是由中断点之前的某任务插入的。由于某种原因,该任务并不想马上执行某操作,而是选择将其移至一系列任务执行完之后的某个任务之间的空档来执行,因此称为异步操作。

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

      前面已经指出了关键性的知识点,下面将直接给“同步阻塞、同步非阻塞、异步阻塞、异步非阻塞”的概念。为了更好的说明,笔者做了一张图,如下:

    在这里插入图片描述

      对于主线程上执行的一系列任务,如果其中的某个任务需要与相关线程交互,当其立即暂时当前的任务而发起请求,这称为同步;当该任务将请求的时间安排到某任务完成之后再发起,这称为异步。当发起请求时,直至获得完整的资源之后,不会继续执行现在或之后的任务,这称为阻塞;当发起请求时,立即获得瞬时的结果,然后继续执行现在或之后的任务,如果获得的瞬时资源不是完整的资源,将之后周期性发送类似的请求,直至获得完整的资源,这称为非阻塞。

      可以看出,同步与异步的区别在于发起请求的时机,而阻塞与非阻塞的区别在于发起请求后是否对本线程进行暂停。

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

      很多读者(包含笔者)都喜欢作者能直截了当地给出概念,而反感拐弯抹角和旁敲侧击。因此,笔者再提炼一下本文核心的四个概念:

    • 同步阻塞:在需要某资源时马上发起请求,并暂停本线程之后的程序,直至获得所需的资源。

    • 同步非阻塞:在需要某资源时马上发起请求,且可以马上得到答复,然后继续执行之后的程序。但如果得到的不是完整的资源,之后将周期性地的请求。

    • 异步阻塞:在需要某资源时不马上发起请求,而安排一个以后的时间再发起请求。当到了那时发出请求时,将暂停本线程之后的程序,直至获得所需的资源。

    • 异步非阻塞:在需要某资源时不马上发起请求,而安排一个以后的时间再发起请求。当到了那时发出请求时,可以马上得到答复,然后继续执行之后的程序。但如果得到的不是完整的资源,之后将周期性地的请求。

    一个生动的例子

      一个贴切生动的例子可能对理解更有帮助。这里假设了这样的一种情景:笔者正在进行公司安排的一个“cleancode”专项需求(下面简称 cleancode 专项),然后突然对于门禁上报告的一项告警不太理解,笔者想要求助自己的同事(设该同事名为 Bob),于是在公司的通信软件(设该软件名为 contact)上向其发送了此求助消息,并假设笔者每天有减脂的诉求,因此在下午下班后不会立刻去吃饭。

      前述的四个概念类比如下:

    • 同步阻塞:笔者在 contact 上给 Bob 发了一条咨询信息,并开启 contact 的消息自动弹出功能。然后笔者暂停手头的工作,翘着二郎腿开始用手机摸鱼,直到手机上弹出 contact 的关于 Bob 的回复信息。

      解释:

      • 笔者、笔者的同事 Bob:两个位于不同服务器上的操作系统。

      • cleancode 专项:正在“笔者操作系统”上运行的一个线程。

      • 笔者放弃工作上的任务:cleancode 专项线程被阻塞。

      • 笔者开始摸鱼:cleancode 专项线程因阻塞而使笔者空闲,笔者通过调度来运行其它无关线程。

      • contact 的消息自动弹出:在操作系统中,用于唤醒阻塞线程的信号量。

    • 同步非阻塞:笔者在 contact 上给 Bob 发了一条咨询信息,然后笔者继续做 cleancode 专项中的其它内容,并周期性查看 Bob 有没有回复。

    • 异步阻塞:笔者在日程表上记录了这个待办事项,然后笔者继续做 cleancode 专项中的其它内容,最后到下午下班时,笔者在 contact 上给 Bob 发了一条咨询信息,并开启 contact 的消息自动弹出功能。然后笔者暂停手头的工作,翘着二郎腿开始在晚上加班时间用手机摸鱼,直到手机上弹出 contact 的关于 Bob 的回复信息。

    • 异步非阻塞:笔者在日程表上记录了这个待办事项,然后笔者继续做 cleancode 专项中的其它内容,最后到下午下班时,笔者在 contact 上给 Bob 发了一条咨询信息,然后笔者继续加班做 cleancode 专项中的其它内容,并周期性查看 Bob 有没有回复。

    提醒与补充

    • 我们平常单独使用的“同步”一词,实际上指的是这里的同步阻塞,而“异步”指异步非阻塞。

    • 大幅度影响性能的,实际上是 阻塞/非阻塞。只有对于不存在 阻塞/非阻塞 情况的请求,同步/异步 才有显著的影响。

    展开全文
  • 同步非阻塞(NIO):客户端发送请求给服务器。服务器需要很长的时间去执行,客户端会一直等待结果返回,不会去做任何事前,而服务器会处理其他的请求,过一会回来处理原先的请求,之后返回结果给客户端,客户端继续...
    同步阻塞(BIO):客户端发送请求给服务端,服务端需要很长的时间去执行,客户端会一直等待结果返回,也不会去做任何事情,服务器也不会处理其他的请求。
    同步非阻塞(NIO):客户端发送请求给服务器。服务器需要很长的时间去执行,客户端会一直等待结果返回,不会去做任何事前,而服务器会处理其他的请求,过一会回来处理原先的请求,之后返回结果给客户端,客户端继续执行。
    异步阻塞:客户端发送请求给服务端,服务端需要很长的时间去执行,客户端会去执行其他任务,而服务器不会处理其他请求,知道处理完本次请求。返回结果给客户端,客户端执行回调函数。
    异步非阻塞(AIO):客户端发送请求给服务端,服务端需要很长的时间去执行,客户端会先去执行回调函数,服务器也会接受并处理请求,过一会回来处理原先的请求,之后返回结果给客户端,客户端继续执行
    
    展开全文
  • 老醉生梦死也不是事儿,于是就一边关注着屏幕,一边做着自己的工作---同步非阻塞 后来发现一心二用太tm累了,于是乎主要干着自己的工作,喜欢的女孩来电提醒我再去关注----异步非阻塞   同步和异步区别:相当于...

    我喜欢一个女孩,于是每天就盯着屏幕守候在手机旁边等待她的来信---同步阻塞

    时间长了眼睛疼,于是就开启了来信提醒,听到声音时唤醒我迷醉的心---异步阻塞

    老醉生梦死也不是事儿,于是就一边关注着屏幕,一边做着自己的工作---同步非阻塞

    后来发现一心二用太tm累了,于是乎主要干着自己的工作,喜欢的女孩来电提醒我再去关注----异步非阻塞

     

    同步和异步区别:相当于状态的变化是又我主动发现还是对方告知

    阻塞非阻塞区别:相当于一心能否二用的事儿。

    展开全文
  • 简单理解什么是同步阻塞/同步非阻塞,异步阻塞/异步非阻塞 举个栗子 1、你在家做饭,用普通的汤锅,米放进去,就站在锅边,傻等饭熟。——这叫同步阻塞 是不是觉得浪费了大量的时间,于是你想提高时间的利用效率。 2...

    简单理解什么是同步阻塞/同步非阻塞,异步阻塞/异步非阻塞

    声明:本篇思想非原创,系从老师处听来。因为CSDN发转载需要有原文链接,本篇没有原文链接,所以填的原创。

    举个栗子

    1、你在家做饭,用普通的汤锅,米放进去,就站在锅边,傻等饭熟。——这叫同步阻塞

    单任务按顺序执行。
    

    是不是觉得浪费了大量的时间,于是你想提高时间的利用效率。
    2、还是用普通的汤锅,米放进去,然后继续回去打游戏,过一会就来看一次。——这叫同步非阻塞

    多任务,定时查看任务执行状态。
    

    时间的利用率稍微提升了一点点,还有没有办法再提升一点呢?

    3、你去某宝淘了个电饭锅,饭熟了会自动跳闸的那种。米放进去,然后傻傻的看它怎么做饭的。——这叫异步阻塞

    单任务,自动提交任务执行状态。
    

    这有什么意义呢?完全没利用好电饭锅的优势啊
    4、这回学聪明了,米放进去,按下按钮,然后就去打游戏了,等到跳闸的时候就去吃饭 。——这叫异步非阻塞

    多任务,自动提交任务执行状态,合理分配,最大化利用资源。
    

    这样是不是聪明了很多,时间的利用率大大提升。

    相对于程序而言的 ,异步可以给你节省出更多的时间,让你去干别的事,同步只能由你自己主动去查看。
    孰优孰劣不言而喻 。
    阻塞和非阻塞,也很好理解。
    同步阻塞,顺序执行,只能傻等,效率低下 。
    同步非阻塞,稍微高明点,但是麻烦了很多,多做很多无用功。
    异步阻塞,这个等于自断一臂,没啥大意义。
    异步非阻塞,这才是异步的最佳用法。

    展开全文
  • NIO同步阻塞与同步非阻塞

    万次阅读 2019-02-27 15:09:26
    BIO与NIO IO与NIO区别:其本质就是阻塞和非阻塞的区别。...IO为同步阻塞形式,NIO为同步非阻塞形式,NIO并没有实现异步,在JDK1.7升级NIO库包,支持异步非阻塞。 BIO:同步阻塞式IO,服务器实现模式为一个连接...
  • 五分钟掌握同步异步I/O同步阻塞同步非阻塞异步阻塞异步非阻塞网络通讯原理网络通讯的过程I/O阻塞I/O模型非阻塞I/O模型多路复用I/O模型信号驱动I\O模型异步I/O模型易于混淆的概念各I/O模型的对比与总结BIO、NIO、AIO ...
  • 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞?...6 什么是同步非阻塞? 7 什么是异步阻塞? 8
  • 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞区别和关系
  • 网上闲逛技术贴,看见一个关于理解同步阻塞、同步非阻塞、异步阻塞、异步非阻塞比较风趣的故事,简单明了,很容易理解,因此记录一下,希望更多人能看见。 故事原文: 老张爱喝茶,废话不说,煮开水。出场人物:老张...
  • 同步非阻塞NIO

    2020-02-23 09:56:17
    同步非阻塞NIO 同步非阻塞的特点:应用程序的线程需要不断的进行IO系统调用,轮询数据是否已经准备好,如果没有准备好,就继续轮询,直到完成IO系统调用为止。 同步非阻塞IO的特点:每次发起的IO系统调用,在内核...
  • 老张爱喝茶,废话不说,煮开水。...(同步非阻塞) 老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。 3 老张把响水壶放到火上,立等水开。(异步阻...
  • 同步、异步:针对发送方阻塞、非阻塞:针对接收方发送方接收方发送方处理接收方处理同步阻塞等待接收方返回等待处理结果返回发送方同步非阻塞等待接收方返回不等待处理结果,去做其他事情异步阻塞不等待接受方返回...
  • NIO,同步非阻塞IO,简单理解:一个请求一个线程 AIO,异步非阻塞IO,简单理解:一个有效请求一个线程 IO:阻塞IO BIO:同步阻塞IO。服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器需要启动一个...
  • ——这叫同步非阻塞 时间的利用率稍微提升了一点点,还有没有办法再提升一点呢? 3、你去某宝淘了个电饭锅,饭熟了会自动跳闸的那种。米放进去,然后傻傻的看它怎么做饭的。——这叫异步阻塞 这有什么意义呢?完全...
  • NIO编程(同步阻塞与同步非阻塞详解)

    万次阅读 多人点赞 2018-02-22 15:56:50
    NIO同步阻塞与同步非阻塞 BIO与NIO IO为同步阻塞形式,NIO为同步非阻塞形式,NIO并没有实现异步,在JDK1.7后升级NIO库包,支持异步非阻塞 同学模型NIO2.0(AIO) BIO(同步阻塞式IO) 同步阻塞式IO,服务器...
  • 并行,并发,串行,同步,异步,阻塞,非阻塞,同步阻塞,同步非阻塞,异步阻塞,异步非阻塞 并行和并发 并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件...
  • (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO ...
  • IO的两个重要步骤:发起IO请求,和实际的IO操作。 在unix网络编程的定义里异步和非异步概念的区别就是实际的IO操作是否阻塞...NIO:同步非阻塞IO 参考如下 同步需要主动去询问结果 http://weixiaolu.iteye.com/b...
  • IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 一、BIO  在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket...
  • BIO与NIO、AIO的区别(这个容易理解)2016年10月20日 15:52:4947819 IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要...
  • 同步阻塞, 同步非阻塞,异步阻塞,异步非阻塞   我们同意一个幼儿园接小朋友放学的列子,这里定义如下: 家长n个,小朋友n个,管理员1个。家长接小朋友需要根据接送牌的。整个流程是:因为只有一个管理员,所以...
  • 面试问我同步、异步、阻塞非阻塞,答的并不是很好,回来后必然要出一篇博文加深印象了
  • (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。 注意这里所说的NIO并非Java的NIO(New IO)库。 (3)IO多路复用(IO Multiplexing):即经典的...
  • 老张爱喝茶,废话不说,煮开水。(网上众说纷纭,不过我还是认为这个更加准确) ...(同步非阻塞) 老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~
  • 异步的运行效率最高,同步阻塞最简单,同步非阻塞是高效和简单的折中。
  • 阻塞 排队买东西 在排队的过程中不能做其他事情 非阻塞 我在排队的过程中还可以玩手机 聊天等 同步 你等待事件返回结果 异步 不用等待事件返回结果 事件会主动回调你 ...
  • nio中文来说就是同步非阻塞的方式来处理IO数据,单独这样解释对于不了解的人来说是建立不起来概念的。所以就需要有对比的来看。 首先,同步阻塞。当执行者要执行由A-B-C三件事情组成的DEMO,当A执行完之后调用B,B...
  • 服务器端编程经常需要构造高性能的 IO...(2) 同步非阻塞 IO(Non-blocking IO):默认创建的 socket 都是阻塞的,非阻塞 IO 要求 socket 被设置为 NONBLOCK。注意这里所说的 NIO 并非 Java 的 NIO(New IO)库。 (3)
  •  在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步,同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,862
精华内容 5,144
关键字:

同步非阻塞