同步,异步,阻塞与非阻塞

原文: https://blog.csdn.net/xyz_dream/article/details/81535590

借鉴原文: https://www.jianshu.com/p/aed6067eeac9

文中说到最重要的一点就是作者很明确地对同步与异步,阻塞与非阻塞做了详细并且通俗,一语点破两者的关系,瞬间茅塞顿开。

同步与异步(大白话说):

首先来解释同步和异步的概念,这两个概念与消息的通知机制有关。也就是同步与异步主要是从消息通知机制角度来说的。

同步: 先执行什么得到结果之后才能继续执行下一步操作。去银行办理业务,排队。前面办理的人没办完,你就不能办理业务。

异步: 我用银行排队机拿小号排队,不需要在那里站着等了。等到我的时候,广播通知说007号用户请前来办理业务,此时你过去办理即可,没必要跟那么多人挤在一起。

阻塞与非阻塞:

阻塞和非阻塞这两个概念与程序(线程)等待消息通知(无所谓同步或者异步)时的状态有关。也就是说阻塞与非阻塞主要是程序(线程)等待消息通知时的状态角度来说的。

阻塞: 我只能一直竖着耳朵听是不是到我了办理业务了。其它事情不能做,要专心致志。

非阻塞: 太坑爹了。上银行拿号排队还不能让我玩手机了?那可不行。 我随便干啥,叫到我的时候我来办理业务就可以了。

效率对比:

1.同步阻塞

排着一长串的队伍,还得站并且专心致志注意到我了吗? (效率低下,试想这样会不会是傻子。。。)

2. 同步非阻塞

一遍站着排队一遍玩手机,眼睛瞟一下手机又抬头看到我了没有? (这个更累,两种任务来回切换,效率低下)

3.异步阻塞

拿着小票,在银行大厅的座位上休息,不能动弹。就在做一件事,那就是广播喊我了吗?

4.异步非阻塞

拿着小票,跷二郎腿,拿手机炒股票,玩游戏。广播叫到007过来办理业务,屁颠地过去办理业务。游戏也玩得爽了,同时又能办理业务了。

以上仅仅只是场景的一种描述,用来打比方。不要有杠精去转牛角尖,那你就学不会什么东西了。