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

    文章

    11218

    浏览量

    222968
  • 阻塞
    +关注

    关注

    0

    文章

    24

    浏览量

    8391
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    飞凌嵌入式ElfBoard-文件I/O的深入学习之阻塞I/O与阻塞I/O

    可能会使程序阻塞等待,直到有数据可读时才会被唤醒返回。 普通文件的读写操作是不会阻塞的,不管读写多少个字节数据,read或 write一定会在有限的时间内返回,所以普通文件一定是以阻塞
    发表于 12-01 13:07

    为什么同步电机多做发电机而异步电机多做电动机?

    根本原因在于:​ ​同步电机能精确控制磁场(励磁),而异步电机不能。​ ​下面我们从研发的四个核心维度进行深度解读。 一、核心原理与特性对比(研发的出发点) 特性维度 同步电机 异步
    的头像 发表于 10-30 16:21 933次阅读

    CH32V307 串口发送阻塞的原因?怎么解决?

    */ modbus_set_rx_mode(master); modbus发送,不知为何阻塞在rt_device_write,初始化 find open 正常
    发表于 09-18 06:06

    【HZ-RK3568开发板免费体验】基于 Select Poll的TCP发服务器

    ,一般分为网络IO(本质就是socket读写)和磁盘IO。 IO模型大致可以分为:同步阻塞同步阻塞
    发表于 08-19 22:01

    从底层解读labview的TDMS高级异步写入的工作原理

    的数据生成线程)点菜(调用异步写入函数)。服务员(异步写入函数)记下订单后立即转身离开去服务下一位顾客(不阻塞顾客),而不是站在厨房门口等厨师做完这道菜才回来(同步)。订单(写入请求)
    发表于 08-14 17:05

    同步快?异步稳?串口通信方案选择的避坑指南

    我们常用的串口究竟是同步还是异步?蓝牙模块、WiFi模块用的又是什么方式?今天,我们就来一探究竟,讲清楚串口通信的同步异步的区别。 1.同步
    的头像 发表于 07-09 16:58 549次阅读
    <b class='flag-5'>同步</b>快?<b class='flag-5'>异步</b>稳?串口通信方案选择的避坑指南

    AMD FPGA异步模式与同步模式的对比

    本文讲述了AMD UltraScale /UltraScale+ FPGA 原生模式下,异步模式与同步模式的对比及其对时钟设置的影响。
    的头像 发表于 07-07 13:47 1435次阅读

    CH32V307串口发送阻塞的原因?如何解决?

    */ modbus_set_rx_mode(master); modbus发送,不知为何阻塞在rt_device_write,初始化 find open 正常
    发表于 06-11 08:05

    安徽京准:北斗卫星同步时钟的安装与调试详解

    安徽京准:北斗卫星同步时钟的安装与调试详解
    的头像 发表于 06-05 10:08 1123次阅读
    安徽京准:北斗卫星<b class='flag-5'>同步</b>时钟的安装与调试<b class='flag-5'>详解</b>

    第二十四章 通用同步异步收发器(USART)

    本文介绍了W55MH32的通用同步异步收发器(USART),其支持全双工异步通信、NRZ格式,具分数波特率发生器,可编程数据字长、停止位等。支持LIN、IrDA等模式,有DMA及多种中断,适用于多场景高速通信。
    的头像 发表于 05-29 15:44 2079次阅读
    第二十四章 通用<b class='flag-5'>同步</b><b class='flag-5'>异步</b>收发器(USART)

    在testbench中如何使用阻塞赋值和阻塞赋值

    本文详细阐述了在一个testbench中,应该如何使用阻塞赋值与阻塞赋值。首先说结论,建议在testbench中,对时钟信号(包括分频时钟)使用阻塞赋值,对其他
    的头像 发表于 04-15 09:34 1010次阅读
    在testbench中如何使用<b class='flag-5'>阻塞</b>赋值和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>赋值

    在S32DS上使用JLINK调试S32K341,被阻塞了,怎么处理?

    我正在尝试使用 S32K341 在新板上刷写程序,但在 S32K3X4EVB 上运行并为 S32K341配置的相同代码出现错误。具体来说,当我使用 S32DS 的 J-Link 探针运行调试时,它在此地址被阻塞,并且不会将其闪存到内存中。有人遇到同样的问题或可以帮助我吗?
    发表于 04-03 08:13

    Linux进程状态详解

    进程状态是task_struct内的一个整数;进行:进程在调度队列中,进程的状态都是running,阻塞:等待某种设备或者资源就绪。进程是一个队列,设备也是一个队列,当我们读磁盘,读网卡的时候,如果
    的头像 发表于 04-01 09:46 811次阅读
    Linux进程状态<b class='flag-5'>详解</b>

    FreeRTOS进阶使用之流缓冲区:高效处理字节流的秘密武器

    开销 基于连续内存存储,相比队列(每个数据项独立存储)更节省RAM。 触发通知机制 当缓冲区数据量达到预设的触发阈值**时,自动唤醒等待的任务,避免轮询开销。 阻塞阻塞模式 阻塞
    发表于 03-24 11:37

    “串口阻塞”你真的会用吗?

    很久才会发出来,一下子出来很多数据”。经过帮客户检查应用程序源码,发现应用程序在串口阻塞方面没有做正确的处理,修改后解决。阻塞打开串口open("/dev/tty
    的头像 发表于 02-13 11:42 1222次阅读
    “串口<b class='flag-5'>阻塞</b>”你真的会用吗?