同步 异步 阻塞 非阻塞概念区分

老张爱喝茶,废话不说,煮开水。

提前剧透一下:同步和非同步主要用来形容被调用线程,阻塞非阻塞用来形容主线程的。
出场人物:老张(主线程),水壶(被调用线程)两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

1 老张把水壶放到火上,立等水开。(主线程等着,不断轮询被调用线程,直到被调用线程返回结果)(同步阻塞)
老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(主线程去做其他事了,但是还会时不时的查看被调用线程是否会返回结果,也就是说被调用线程自己是没法告诉主线程的)(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(主线程等着,但是是睡眠了,被调用线程通过中断的方式告诉主线程我可以返回结果了)(异步阻塞)
老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(主线程去干其他事了,被调用线程通过中断的方式告诉主线程我可以返回结果了)(异步非阻塞)
老张觉得自己聪明了。

所谓同步异步,只是对于水壶(被调用线程)而言。
普通水壶,同步;响水壶,异步。
虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。(中断)这是普通水壶所不能及的。
同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

所谓阻塞非阻塞,仅仅对于老张而言。
立等的老张,阻塞;看电视的老张,非阻塞。
情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

时间: 2024-10-15 23:32:27

同步 异步 阻塞 非阻塞概念区分的相关文章

异步/同步,阻塞/非阻塞,单线程/多线程概念梳理

最近看了一文说到异步是单线程的,顿时就傻眼了,对相关概念和同事进行了一些讨论和总结. 文中的描述是以我的理解来说的,可能不一定准确甚至正确,有错欢迎指正. 这三个概念我认为是描述不同的维度的,概念正交. 异步 同步 异步和同步是不同的流程设计风格. 但存在依赖关系的操作之间是同步的,也就是如果操作B依赖操作A的返回,那么B必须要在A结束后才能执行. 比如你要读取文件然后对文件内容进行处理,那么读取内容和处理内容就是同步的. 而异步这是操作间没有依赖关系,或者先后顺序并不重要. 比如用户登陆要给登

[概念] 同步 异步 阻塞 非阻塞

同步 异步 指两个线程间的关系 两个线程之间要么是同步的,要么是异步的 同步操作时,调用者需要等待被调用者返回结果,才会进行下一步操作 异步操作时,调用者不需要等待被调用者返回调用,即可进行下一步操作 被调用者通常依靠事件.回调等机制来通知调用者结果 阻塞 非阻塞 是对同一个线程来说的 在某个时刻,线程要么处于阻塞状态,要么处于非阻塞状态 关注的是程序在等待调用结果(消息,返回值)时的状态 阻塞调用是指调用结果返回之前,当前线程会被挂起.调用线程只有在得到结果之后才会返回 非阻塞调用指在不能立刻

同步/异步与阻塞/非阻塞

一.同步与异步同步/异步, 它们是消息的通知机制 1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等).但是一般而言,我们在说同步.异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务.最常见的例子就是 SendMessage.该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回.当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用者. B.

深入理解同步/异步与阻塞/非阻塞区别 (转)

转载自:http://chuansong.me/n/2124760 几年前曾写过一篇描写同步/异步以及阻塞/非阻塞的文章,最近再回头看,还存在一些理解和认知误区,于是重新整理一下相关的概念,希望对网络编程的同行能有所启发. 同步与异步 首先来解释同步和异步的概念,这两个概念与消息的通知机制有关. 举个例子,比如一个用户去银行办理业务,他可以自己去排队办理,也可以叫人代办,办完之后再告知用户结果.对于要办理这个银行业务的人而言,自己去办理是同步方式,而别人代办完毕再告知则是异步方式. 两者的区别在

单线程,同步异步,阻塞非阻塞的理解

一.概念理解 1.同步异步: 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回.但是一旦调用返回,就得到返回值了.换句话说,就是由*调用者*主动等待这个*调用*的结果. 而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果.换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果.而是在*调用*发出后,*被

理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO

以下是IO的一个基本过程 先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间.当用户程序读取数据的时候,会经历两个过程:磁盘到内核空间(这块消耗性能,下面简称内核数据准备),内核空间拷贝到用户空间(下面简称用户空间拷贝). 基于这个前提,同步异步IO,阻塞非阻塞IO 这几个概念其实非常类似的,区分的关键点在于被调用者的返回方式. 当我们进行IO操作的时候,如果被调用者将任务全部执行完返回,称为同步

Python并发编程之同步\异步and阻塞\非阻塞

一.什么是进程 进程: 正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 进程和程序的区别: 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程. 需要强调的是:同一个程序执行两次,那也是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播郭德纲,一个可以播高晓松. 二.并行和并发 无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务 (一)并发:是伪并行,即

008. 阻塞&非阻塞、同步&异步

阻塞 非阻塞:关注的对象是调用者: 阻塞:调用者发起调用后,处于等待状态,直到该调用有返回: 非阻塞:调用者发起调用后,不需要等待返回,可以往下执行: 同步 异步:  关注的对象是被调用者: 同步:服务方(被调用者)接收到这个调用后,直到执行完成得到结果,才将结果返回调用者:    异步:服务方(被调用者)接收到这个调用后,立即返回,当执行完成得到结果后,再通过修改状态或发送消息通知调用者. 一.从分布式系统服务间调用的角度 作者:严肃链接:https://www.zhihu.com/quest

理解同步异步与阻塞非阻塞

本篇文章我准本从三个大方面来解释下同步异步.阻塞非阻塞的知识,第一个方面主要是说下,到底什么是同步异步.阻塞非阻塞:第二个方面主要是解释下在I/O场景下,同步异步阻塞非阻塞又是怎么定义的,第三个方面介绍下在unix下同步异步又有哪些阻塞非阻塞IO. 1.同步异步与阻塞非阻塞 首先从大的方面来说,"阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答. 1).同步与异步 同步和异步关注的是消