同步/异步、屏蔽/非屏蔽文章#linux #os #操作系统课开始前,小明有一天他妈妈、王叔叔在家,小明的妈妈让小明去小区门口看看他爸爸是否开车回来。如果开车回来,给他妈妈打电话。(阿尔伯特爱因斯坦,《北方专家》前情提要)。

故事很简单,那么我们来一起看看怎么做-

首先,我们将事情分成三部分

1.去小区门口

2.看着他父亲的车

3.打电话给母亲

首先我们使用第一种最基本的思维

去小区门口->等待父亲->打电话给母亲

这是一个正常人都能够想到的方法,在这个方法里面,小明能随时知道事情的发展状态,那么我们认为这种状态就是同步的。

那么如果小明此时想去和小伙伴们玩,这种方法就行不通了,此时他找来了小刚,让小刚帮忙看门,那么这个流程如下。

[跳跳]去小区门口->找到小刚->让小刚看门->如果父亲回来了通知小明->小明自己去玩

通过这个过程可以看到,事情的经手人从一个人变成了两个人,小刚和小明作为独立的个体,干了不同的事情,事件的状态也不能由小明实时掌握(必须小刚通知他才知道),那么如果小刚不通知小明,小明的父亲处于又来又没来的叠加态,只有小明主动去询问或者小刚告知,小明才知道事件的状态(事件的波函数坍缩)。所以我们把这种让其他人去做事情的方式叫做异步。

在这里我们总结一下,针对一个事情来说,可以分成组多部分,而做这件事情的核心只能有一个人(党的核心也只能有一个),如果这个人能随时掌握事件状态,那么这个过程我们成为同步过程,反之,如果其他人参与加入处理事件,这个核心的人不能随时掌握事件状态,这样就是异步的,只有其他人像核心人员汇报工作结果,核心的人才能知道事件的状态,汇报结果的过程叫做同步过程。

接下来针对于阻塞和非阻塞的理解就很简单了。

阻塞:小明如果没等来他父亲必须一直等

非阻塞:小明没有等来他父亲可以选择去和小伙伴们玩,每隔一段时间看一下。

从这两者区别中可以看出,阻塞和非阻塞决定如何做事情。

同步和异步决定谁去做事情!

二者组合可以形成四种状态

同步阻塞:自己去做,没做完就一直做

同步非阻塞:自己去做,没做完也可以干别的,每隔一段时间做一下

异步阻塞:找其他人来做,但是如果这件事情没做完,他就一直等

异步非阻塞:找其他人来做、如果这件事情没做完,也可以去做其他事情,这件事情等通知就好。

形成的这四种状态,正是我们操作系统中的四种基本编程逻辑。

下面我们从定义角度看一下

什么是同步:1.科学技术上指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。

那么相对于线程来讲,同步的作用就是任意将线程的状态同步到主线程,而如果系统中只有一个线程,那么这个线程就是主线程,所以在编程中,同步的概念就是主线程去做执行代码。

所以异步的过程也就明了了,就是主线程让其他线程程去执行代码。

接下来就是阻塞,做执行一个任务没有做完必须一直做这个任务就是阻塞,而没做完,去做其他任务就是非阻塞。

相关推荐