阻塞、非阻塞,同步、异步
链接:https://www.zhihu.com/question/26393784/answer/1714468454
链接:https://www.zhihu.com/question/26393784/answer/507924045
同步,异步
是指两个线程之间的关系,如果线程A对线程B发起请求,A要一直到等B的结果返回了才能继续往下运行,A和B就是同步关系。如果线程A对线程B发起请求之后,不在原地等结果,直接干别的事情去了,等B有结果了再通知A,A和B的关系就是异步关系。
阻塞,非阻塞
是指单个线程的状态,如果线程A对线程B发起请求,A线程要等B线程的结果,A在等的过程中不干别的,线程挂起,休眠,就是阻塞状态;如果A线程不用等B的结果,直接干别的去了,那么就是非阻塞状态。
同步不同步,阻塞不阻塞,这两个概念是互相独立的
也就是说他们一共可以搞出来四种情况:
- 同步+阻塞:程序代码一行一行执行,上一行不执行完,下一行就不会被执行;如果上一行卡住了迟迟不结束(阻塞了),那么整块代码全部卡住。遇到这种代码的感觉就是程序突然卡住死机,小圈圈来回转,此时用户无法区分电脑是在冥想还是挂了,所以体验非常差。
- 同步+非阻塞:这就是最常见的程序,一行一行序贯执行,且没有哪一行会出现卡死的情况。这种程序最符合人们对计算机程序的心理预期,也就是程序能做到“有问立答”。
- 异步+阻塞:虽然代码中某些部分会卡住,但是由于采用了异步的处理方式(包括callback、future、promise、reactiveX、async-await/coroutine),所以卡住行的下一行不会傻等,整个代码块也就不会卡住。这时虽然做不到有问立答,但是会给你一张小卡片上面写着“已受理,请稍等”,这种体验也不会太差。
- 异步+非阻塞:非阻塞情况下一般不会采用异步编程,这个组合属于脱裤子放屁。但是在兼有阻塞非阻塞的代码块中,由于整块都可能采用异步编程,所以也会出现这种组合。体验上讲也是有问立答,只是会稍稍慢一点,但感觉不出来。一般来说,先看代码中有没有阻塞的部分,如果有阻塞了那就要立即考虑是不是上异步,也就是选取一种异步范式(callback、future、promise、reactiveX、async-await/coroutine)来重写代码。
在Vert.x中的判断阻塞的标准是,任何一个调用必须2秒内返回结果,一旦超时就认为这段代码是阻塞的,也就是要变成异步。
阻塞、非阻塞,同步、异步相关推荐
- 异步通知是什么意思_一次相亲经历,我彻底搞懂了阻塞非阻塞、同步异步
看到标题,可能你会想,相亲跟阻塞/非阻塞,同步/异步有啥关系,这个逗b不知道在想什么东西.不要急,且听我慢慢道来 年纪大了,一回家七大姑八大姨就各种催婚,都说要给我介绍女朋友.这不,刚刚门口,我的大姨 ...
- 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行,太实用了!
作者:Martin cnblogs.com/mhq-martin/p/9035640.html 基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运 ...
- 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...
常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...
- 同步 异步 阻塞 非阻塞概念区分
老张爱喝茶,废话不说,煮开水. 提前剧透一下:同步和非同步主要用来形容被调用线程,阻塞非阻塞用来形容主线程的. 出场人物:老张(主线程),水壶(被调用线程)两把(普通水壶,简称水壶:会响的水壶,简称响 ...
- 【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...
网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...
- Socket 同步/异步 与阻塞/非阻塞区别
2019独角兽企业重金招聘Python工程师标准>>> 在网上看了很多答案,也没找到合适的,也许本文也不是合适答案:) 同步和异步关注的是消息通信机制,而阻塞非阻塞关注的是程序在等待 ...
- 异步同步、阻塞非阻塞、异步回调、线程队列和协程
今天学习了异步同步.阻塞非阻塞.异步回调.线程队列和协程 一.异步同步和阻塞非阻塞 线程的三种状态: 1.就绪 2.运行 3.阻塞 阻塞:遇到了IO操作 代码卡住 无法执行下一行 CPU会切换到 ...
- NIO详解(二): BIO 浅谈 同步 异步与阻塞 非阻塞
在我们了解Java NIO/BIO的网络通信之前,我们先了解一下常用的阻塞/非阻塞模型以及同步/异步的概念 一.阻塞和非阻塞 从简单的开始,我们以经典的读取文件的模型举例.(对操作系统而言,所有的输入 ...
- 异步/同步、阻塞/非阻塞的理解
异步/同步.阻塞/非阻塞的理解 [同步和异步] 通俗的讲: 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个 ...
- 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章
来源:编程新说 网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTT ...
最新文章
- 不相交集类以及应用迷宫生成
- 深入理解Python闭包概念
- 基于标准C语言的数字图像处理基本框架(转)
- ------------------字节流---------------------
- 亲和性分析_0(python数据挖掘入门与实践-实验1)
- dump分析工具_阿里P8教你如何使用Jprofile解析dump文件
- 区块链教程Fabric1.0源代码分析configtx#genesis-兄弟连
- sola病毒的手工杀除
- Windows版变色龙
- 高德地图vs百度地图
- Windows下利用N2N访问内网资源,点对网的实现
- 如何搭建一个自己的微信公众号
- C语言实现连接MySQL服务器CURD
- 【图像检测-缺陷检测】基于灰度共生矩阵实现痕迹检测matlab代码
- 学生HTML游戏网页作业作品——HTML+CSS+JavaScript魔域私服游戏HTML(1个页面)
- 快速入门Docker
- 山高有攀头,路远有奔头~
- C语言 变量的指针和指向变量的指针变量
- 可口可乐调研——案例分析
- 低代码内参:低代码平台 Airtable 再获 7.35 亿美元的融资,一年内估值翻倍达117亿美元