0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解同步异步和阻塞非阻塞

汽车玩家 来源:简书 作者:coding400 2020-05-03 17:53 次阅读

同步、异步

同步、异步分别指的是一种通讯方式,当 cpu 不需要执行线程上下文切换就能完成任务,此时便认为这种通讯方式是同步的,相对的如果存在cpu 上下文切换,这种方式便是异步。

详解同步异步和阻塞非阻塞

这里通过一个去食堂打饭的示例来理解什么是同步、异步

同步

假设现是上午最后一节课,由于小李上课的教室离食堂比较远,当下课之后,如果小李跑得不够快,那么到食堂之后会发现别人已经早你一步到达了,而小李又是个三好学生,又不能插队,此时小李只能悲痛欲绝的排在打饭窗口A的队伍最后一个人后面,依次等待轮到小李填写菜单然后取饭

异步

同样的场景,当小李跑到食堂之后,由于身体不好,已经气喘吁吁,此时又想找个位置休息下,又太饿,想去排队打饭。还好,窗口B 提供了这个功能,打饭的人先去取号并填写菜单,然后就可以去做其他事情,等到排的号到小李了之后,食堂阿姨会通过这个号码来呼叫你来取已经做好的饭,这时你心中一喜,这不就是我现在需要的么,于是你拿了号及填写菜单之后,便去找个位置占着,一边等待食堂阿姨叫你来取饭,同时还可以与朋友聊聊人生

总结可以看出,同步的方式的耗时包含了:1.排队等待 2.填写菜单 3.等待厨师做好而异步的方式则可以直接填写好菜单、取个号然后交给食堂阿姨之后,便可以去做其他的事情,完全没有等待的耗时,只需要在食堂阿姨呼唤你的时候,来取饭即可。

异步通常能提高系统的吞吐量,从 Servlet 3.0 便支持通过异步的方式来处理请求,当然这并不代表它什么都好,缺点是会降低系统的一部分响应时间,而且增加了系统的复杂度,使调试困难 同步相对的便是,编程简单,响应速度快,不需要对线程上下文进行切换

阻塞、非阻塞

阻塞、非阻塞指的是在同步模式下,如果当前线程一直在等待响应数据并且不能做其他事情那么认为是阻塞的,如果当前线程在等待响应数据返回的同时,又可以干其他的时,那么则是非阻塞的

详解同步异步和阻塞非阻塞

同样的,这里再次使用食堂打饭的场景

阻塞

当小徐到食堂时,已经有许多人在排队打饭了,这时小徐无奈之下,选择了离她最近的窗口A排队打饭,然后等待的时间总是漫长的,这时她百般无聊下,想拿出她的手机准备消磨下时间,结果她突然想起手机还在教室!虽然站在这里排队打饭没有手机玩,但也是不幸中的万幸了,总算手机没丢

非阻塞第二次,小徐再次来到食堂,发现食堂新增了取号的功能,但是只能取号,不能填写菜单,最终还是选择了这家取号的窗口B,等着叫号然后写菜单就可以了,小徐兴高采烈的玩起了手机,刷起了简书

总结

当你排队在窗口A的时候,此时不能做其他任何事情,只能等着队伍到自己这,然后填写菜单,最后等待取饭,此时在整个排队的周期内都不能干其他事情 而在窗口B则可以通过取号的方式,让你不需要时刻的去站着排队,而是可以去刷刷简书、打打游戏

JDK中的BIO 对应的就是阻塞IO,NIO 对应的是非阻塞IO,通过非阻塞IO,可以让一个线程处理成千上万的并发请求

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10824

    浏览量

    211095
  • 阻塞
    +关注

    关注

    0

    文章

    24

    浏览量

    8090
收藏 人收藏

    评论

    相关推荐

    TPA3004功放,开机保护,声音阻塞,为什么?

    TPA3004功放,开机保护,声音阻塞。过一段时间,芯片发热后正常。询求问题解决方法
    发表于 11-08 08:30

    socket编程中的阻塞阻塞

    在网络编程中, socket 是一个非常重要的概念,它提供了一个抽象层,使得开发者可以不必关心底层的网络通信细节。 socket 编程中的阻塞阻塞模式是两种不同的操作方式,它们对程序的响应性
    的头像 发表于 11-01 16:13 128次阅读

    Verilog HDL的基础知识

    本文继续介绍Verilog HDL基础知识,重点介绍赋值语句、阻塞阻塞、循环语句、同步异步、函数与任务语法知识。
    的头像 发表于 10-24 15:00 168次阅读
    Verilog HDL的基础知识

    socket阻塞阻塞的区别是什么

    在计算机编程中,socket 是一种通信端点,用于在网络中进行数据传输。Socket 可以是阻塞的或阻塞的,这两种模式在处理数据传输时有不同的行为。 阻塞模式(Blocking Mo
    的头像 发表于 08-16 11:13 574次阅读

    求助,关于CyU3PUsbHostEpWaitForCompletion函数中的阻塞问题求解

    主线程)调用该函数时,CyU3PUsbHostEpWaitForCompletion 函数经常阻塞,虽然指定了超时值,但从未返回。 我想应该在主程序线程中调用该函数,以避免出现阻塞问题。 如何正确使用该功能而不造成
    发表于 07-23 07:57

    如何在espconn_gethostbyname上创建阻塞线程?

    在 espconn_gethostbyname 上创建阻塞线程
    发表于 07-10 07:45

    是否可以使用Aurix中的CCU6模块,以阻塞方式在检测到GPIO下降沿时触发中断?

    我想知道,是否可以使用 Aurix 中的 CCU6 模块,以阻塞方式在检测到 GPIO 下降沿时触发中断? TC397 的示例代码仅将其用于 PWM 生成和时钟定时,但我很好奇如何将其用于 GPIO 边沿检测。
    发表于 07-04 07:00

    请问使用lwip创建socket,该如何做到阻塞的接收发送数据?

    请问使用lwip创建socket,该如何做到阻塞的接收发送数据?
    发表于 06-19 06:02

    如何让write行为具有阻塞特性?

    spp_vfs_write 与 PC 端 socket 沟通:esp32 write, PC read.若 PC 端不执行 read 行为,esp32 持续 spp_vfs_write ,数据会发送到 PC 端吗?还是在 esp32 设备端 ?谢谢。另如何让 write 行为具有阻塞特性?谢谢。
    发表于 06-11 07:23

    鸿蒙OS实例:同步获取应用配置的【versionCode和versionName】

    鸿蒙大部分提供的方法都是异步的,所以可以使用async、await 转换,可以跟同步方法一样的使用...只是要注意这个会阻塞
    的头像 发表于 03-27 16:20 461次阅读

    什么是阻塞阻塞

    什么是阻塞阻塞?我们就用管道的读写来举例子。
    的头像 发表于 03-25 10:04 464次阅读

    如何在8051单片机上编程一个阻塞延迟函数?

    术语阻塞意味着微控制器的主代码在整个延迟期间被阻塞(什么都不做)。对于小的延迟和简单的问题,这通常是可以接受的,但可能导致不可接受的操作。
    发表于 02-29 11:48 721次阅读

    verilog同步异步的区别 verilog阻塞赋值和阻塞赋值的区别

    Verilog是一种硬件描述语言,用于设计和模拟数字电路。在Verilog中,同步异步是用来描述数据传输和信号处理的两种不同方式,而阻塞赋值和
    的头像 发表于 02-22 15:33 1526次阅读

    以太网阻塞的常见原因与解决方法

    以太网阻塞的常见原因与解决方法 以太网阻塞是指在以太网中数据流量增加超过网络设备处理能力的情况下,导致网络性能下降、延迟增加、丢包率上升等问题。下面将详细讨论以太网阻塞的常见原因及解决方法。 一
    的头像 发表于 12-27 13:58 1193次阅读

    定时器会阻塞线程吗 定时器指令有哪几种

    定时器会阻塞线程吗 定时器指令有哪几种  定时器一般不会阻塞线程,但具体是否会阻塞取决于所使用的定时器实现方式和使用方式。 定时器指令可以分为硬件定时器指令和软件定时器指令。下面将详细介绍各种定时器
    的头像 发表于 12-19 14:03 884次阅读