美文网首页Web 前端开发 让前端飞
同步、异步和阻塞、非阻塞是一回事吗?

同步、异步和阻塞、非阻塞是一回事吗?

作者: JokerPeng | 来源:发表于2017-08-30 10:31 被阅读0次

初次接触这2组概念时候,很容易犯糊涂,觉得意思很相近,感觉同步和阻塞差不多,都是一个做不完,一直等,直到完成再去处理其他事,异步和非阻塞都是无需等待的分别完成一些操作。真的是这样吗?

一、概念上理解

1. 同步和异步只要针对客户端(C端)

同步,就是在客户端发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。

例子:普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事。

异步,当c端一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

例子:ajax请求(异步): 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

2. 阻塞和非阻塞针对的是服务端(S端)

阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。

例子:比如到你某个时候到A楼一层(假如是内核缓冲区)取快递,但是你不知道快递什么时候过来,你又不能干别的事,只能死等着。但你可以睡觉(进程处于休眠状态),因为你知道快递把货送来时一定会给你打个电话(假定一定能叫醒你)。

非阻塞指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

例子:还是取快递,如果用忙轮询的方法,每隔5分钟到A楼一层(内核缓冲区)去看快递来了没有。如果没来,立即返回。而快递来了,就放在A楼一层,等你去取。

二、老王烧水的例子

网上流传的一个经典的老王烧水的故事(网友真TM有才):

出场人物:老王,水壶两把(普通水壶,简称水壶;烧开后会响的水壶,简称响水壶)。

老王想了想,有好几种等待方式:

  1. 老王用水壶烧水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。——同步阻塞

老王想了想,这种方法不够聪明。

  1. 老王还是用水壶烧水,不再傻傻的站在那里看水开,跑去卧室上网,但是还是会每隔一段时间过来看看水开了没有,水没有开就走人。——同步非阻塞(轮询)

老王想了想,现在的方法聪明了些,但是还是不够好。

  1. 老王这次使用高大上的响水壶来烧水,还是站在那里,但是不会再每隔一段时间去看水开,而是等水开了,水壶会自动的通知他。——异步阻塞

老王想了想,既然水壶可以通知我,那我为什么还要傻傻的站在那里等呢,嗯,得换个方法。

  1. 老王还是使用响水壶烧水,跑到卧室上网去,等着响水壶自己把水烧开了以后通知他。——异步非阻塞

老王豁然,这下感觉轻松了很多。

同步和异步

同步就是烧开水,需要自己去轮询(每隔一段时间去看看水开了没),异步就是水开了,然后水壶会通知你水已经开了,你可以回来处理这些开水了。
同步和异步是相对于操作结果来说,会不会等待结果返回。

阻塞和非阻塞

阻塞就是说在烧水的过程中,你不可以去干其他的事情,非阻塞就是在同样的情况下,可以同时去干其他的事情。阻塞和非阻塞是相对于线程是否被阻塞

三、总结

  1. 同步,就是我客户端(c端调用者)调用一个功能,该功能没有结束前,我(c端调用者)死等结果

  2. 异步,就是我(c端调用者)调用一个功能,不需要知道该功能结果,该功能有结果后通知我(c端调用者)即回调通知

  3. 阻塞,就是调用我(s端被调用者,函数),我(s端被调用者,函数)没有接收完数据或者没有得到结果之前,我不会返回。

  4. 非阻塞,就是调用我(s端被调用者,函数),我(s端被调用者,函数)立即返回,通过select通知调用者。

同步/异步主要针对C端, 但是跟S端不是完全没有关系,同步/异步机制必须S端配合才能实现.同步/异步是由c端自己控制,但是S端是否阻塞/非阻塞, C端完全不需要关心。

相关文章

  • UNIX 的5种IO模型介绍

    IO模型同步、异步、阻塞、非阻塞socket阻塞与非阻塞,同步与异步 同步和异步 同步/异步主要针对C端-同步就像...

  • 谈论:同步异步阻塞非阻塞.md

    同步/异步:关注的方式(是否主动) 阻塞/非阻塞: 同步阻塞BIO: 同步非阻塞NIO: 异步非阻塞: 异步阻塞:

  • Java IO

    Before IO 分为:同步、异步阻塞、非阻塞 同步和异步是目的,阻塞和非阻塞是实现方式。 一个IO操作其实分成...

  • 异步化介绍

    1.异步化介绍 1.1 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞, 这个几个词已经是老生常谈,但是常常还...

  • BIO NIO AIO

    BIO:同步阻塞IONIO:同步非阻塞IOAIO:异步非阻塞IO先弄清楚同步、异步,阻塞、非阻塞概念。 io操作分...

  • 阻塞非阻塞 同步异步 IO模型及其应用 NIO实现原理

    1.同步异步概念 2.阻塞非阻塞概念 3.常见I/O模型:同步阻塞IO,同步非阻塞IO,异步阻塞IO,异步非阻塞I...

  • 同步阻塞IO,同步非阻塞IO,异步阻塞IO,异步非阻塞IO

    同步,异步 和 阻塞,非阻塞之间的区别? 同步,异步,是描述被调用方的。阻塞,非阻塞,是描述调用方的。 同步不一定...

  • IO模型

    原文参考链接 四种状态 同步 异步 阻塞 非阻塞 IO分类 同步阻塞IO 同步非阻塞IO 异步非阻塞IO注意: 没...

  • 高并发的“大杀器”:异步化、并行化

    高并发的大杀器:异步化 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞,这几个词已经是老生常谈,但是还是有很多...

  • 高并发的“大杀器”:异步化、并行化

    高并发的大杀器:异步化 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞,这几个词已经是老生常谈,但是还是有很多...

网友评论

    本文标题:同步、异步和阻塞、非阻塞是一回事吗?

    本文链接:https://www.haomeiwen.com/subject/zeyzdxtx.html