linux经典面试题:同步的含义(同步与互斥中的同步 & 同步通信与异步通信中的同步)& 阻塞 & 非阻塞

在面试中,我们经常会被面试官问到:请解释一下同步的含义,此时,一定要注意这可能是个坑,注意!!!

在被问到这个问题时,不要急着回答面试官,一定要向面试官确认一下,同步是那个背景的同步,别没问清楚就开始说哦

1.同步与异步中的同步

此同步指的是行为的同步

例如一群人在学跳舞,前面还有一个小姐姐在领舞,学舞的人的动作和领舞人的动作是一样的话,此时就是同步的体现

ps:进程/线程中的同步也是此处所指的同步

2.同步通信与异步通信中的同步

(1)同步

就是说呢,在发出一个调用时,在没有得到结果之前,该调用就不会返回,而是一直在那里等着,直到调用执行结束,此时也获得了该调用的返回值,即就是同步指的是由调用者主动等待这个调用的结果

(2)异步

异步与同步刚好相反,调用在发出之后,这个调用就直接返回了,所以不会立即得到调用结果,而是在调用发出之后,调用结果由被调用者来告诉给调用者,即就是调用结果是由被调用者通过状态、通知来通知给调用者,或通过回调函数处理这个调用

例如:

假设你去吃饭,你点了一个炒菜:
  (1)同步就是说你点完饭之后,一直在那里等着厨师给你做,直到厨师做完,你把饭
  自己端走,即就是说结果由你自己主动获取,
   (2)异步呢就是你点完饭之后,去找一个位置坐着,当服务员告诉你饭做好了,
你去把饭端过来,即就是说,结果由服务员通知给你,你自己使被动的得知调用结果
的,如果服务员不通知,你是不会知道结果的

阻塞和非阻塞关注的是程序在等待调用结果(消息、返回值)时的状态

3.阻塞

阻塞调用就是,在调用结果返回之前,当前线程什么也不会做,而是一直在那里等待,直到调用线程得到结果,此时才会返回

4.非阻塞

非阻塞调用就是在等待的时候,可以去做别的事,只是会轮询的去查看调用线程的状态

5.同步阻塞

同步阻塞=同步+阻塞
调用结果由调用者主动获取,且是阻塞式的等待着 ,即就是说调用者会主动的关注调用结果,而且是阻塞式的在那里看着

6.同步非阻塞

同步非阻塞=同步+非阻塞
调用结果是由调用者主动获取的,但是是非阻塞式的等着,此时的动作是调用结果是由调用者主动获取的,但是他不会在那里傻等着,而是会去做别的事,只不过需要时不时的去看一下程序的执行情况

7.异步阻塞

异步阻塞=异步+阻塞
调用结果是由被调用者通知给调用者的,而且是阻塞式的在哪里等着,即就是调用者会一直在那里等着,但是不会去看程序执行的怎么样了,而是由被调用者来通知的

8.异步非阻塞

异步阻塞=异步+阻塞
调用结果是由被调用者告诉调用者的,就是调用者是被动的得知结果的,调用者在等结果的过程中,并不是一直在那里傻等着,而是可以去做自己的事

例如:
你等女朋友去吃饭,女朋友现在的状态就是她还没收拾好,你需要等她
(1)同步阻塞

就是你在等她的时候,只是单纯的等她,不会去做别的事,而且你会主动的看她有没有收拾好,如果好了那就可以出去了

(2)同步非阻塞

就是再等她的同时你可以做别的事,例如一边等她一边做题,但是他有没有收拾好是你自己主动去看的,而不是由她通知你

(3)异步阻塞

就是你在等她的时候,什么也不能做,只能做一件事那就是等她,而且不会去关注她什么时候收拾好,等她收拾好,告诉你一声,此时你就会得知她已经可以收拾好了可以出去了,即就是你是被动的知道她收拾好的这个结果的

(4)异步非阻塞

就是你在等她的时候,你可以去做别的事,可以一边等她一边做自己的事,但是此时还是不会主动的去关注她什么时候时候好,直到她通知你,她已经可以出去了,此时你才会得知这个结果,你是被动的知道的

你可能感兴趣的:(linux)