同步、异步、阻塞和非阻塞

网友投稿 770 2022-12-02

同步、异步、阻塞和非阻塞

同步、异步、阻塞和非阻塞

本文主要是个人总结,可能有误!因为有关这几个概念,网络上的表述虽大同小异但众说纷纭,只能按自己的理解再总结一遍。

表面上看,同步和阻塞都是没干完,就等着干完;异步和非阻塞都是没干完,先干别的吧,好像很类似!

实际上,同步和异步是对调用方而言,比如说同步函数、异步函数,异步函数里有个参数是回调函数;

而阻塞、非阻塞都是对处理方(被调用方)而言,针对的是线程。阻塞,就是还没有结果,将线程挂起。线程挂起以后,就是处于死等的状态;非阻塞,还没有结果,线程不挂起,可以继续做别的。

如果从范围大小看,同步异步要大于阻塞非阻塞。同步机制里面,线程可以阻塞,也可以非阻塞。就是说,我这个调用,是同步的,去办一件事,一定要办成一个结果才返回。但在办事的过程中,我可以响应其他事。

同理异步方面,也有阻塞非阻塞之分。

编一个故事来区分这几个概念:

入冬,冷空气来袭,天气反复,有一个小朋友病了,父母带他去看医生。

首先要挂号。母亲抱着小朋友,让父亲去挂号(开辟了一个线程)。

情况1、孩子高烧,母亲很担心孩子的病情,心急如焚,就在旁边等父亲挂好号,然后一起去看医生。过程中她心乱如麻,脑子基本一片空白,一心盼望父亲快点挂完号。这就是同步。

情况2、孩子没有发烧,只是有点咳嗽、流涕,应该是小感冒而已。母亲不怎么担心,她对父亲说,你先去拿个号,好了再叫我们。然后自己就带小孩到医院大院里的儿童设施里玩去了。这就是异步。

情况a  父亲也很担心孩子病情,并且排队挂号的人很多,整个过程中他就一直盯着前面,希望队伍挪动得快一点,也生怕有人插队。以致有小偷掏他口袋,他也浑然不觉。这时,他这个线程处于挂起状态。这就是阻塞。

情况b 父亲毕竟是个男子汉,他认为儿子没有这么娇贵。所以他掏出手机,边排队边玩手机。期间他还接了几个电话,谈了一次工作,安排了一个饭局。他这个线程保持激活,随时对外界做出反应。这就是非阻塞。

情况a 和 情况b 放在情况一里,就是同步阻塞或同步非阻塞;放在情况二里,就是异步阻塞或异步非阻塞。

参考文章:

​​所谓阻塞/非阻塞,关注的是能不能动。

参考文章:

【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SQL SERVER学习笔记:临时表与表变量
下一篇:NoSql的易扩展性
相关文章

 发表评论

暂时没有评论,来抢沙发吧~