资讯专栏INFORMATION COLUMN

彻底搞清 同步,异步,阻塞,非阻塞的概念性知识

libin19890520 / 3038人阅读

摘要:需要先对的概念有一定的认识我们通常使用的打开文件关闭文件读读写写这叫本地文件而在编程中本质其实是网络同步异步阻塞非阻塞之前反正一直搞不清楚同步和阻塞异步和非阻塞的概念总感觉同步就是阻塞异步就是非阻塞的总是搞得晕乎乎的于是就重新查了些资料进行

IO

需要先对 IO 的概念有一定的认识:

我们通常使用php的fopen打开文件关闭文件读读写写, 这叫本地文件IO;

而在socket编程中, 本质其实是网络IO;

同步异步阻塞非阻塞

之前反正一直搞不清楚同步和阻塞, 异步和非阻塞的概念, 总感觉同步就是阻塞, 异步就是非阻塞的, 总是搞得晕乎乎的, 于是就重新查了些资料进行了梳理, 如有不对欢迎大家指正;

简单来说

同步: 同步体现在, 在等待一件事情的处理结果时, 对方是否提供通知服务, 如果对方不提供通知服务, 则为 同步;

异步: 异步体现在, 在等待一件事情的处理结果时, 对方是否提供通知服务, 如果对方提供通知服务, 则为 异步;

对于常见的Ajax请求, 前端在ajax请求后通常还会执行一些其他加载操作(非阻塞); 在server端处理完后, 会将数据"通知"到前端页面;

而对于最近正好在看的RabbitMQ消息队列系统, 虽然本质上来说也是异步的(它是通过分隔了数据的发送和接收来解耦应用, 数据在最终被消费者处理完后也不会通知到生产者, 因为消息系统采用了很多手段如持久化, 重试等来确保消息一定会被执行), 但实质上, 消息会在发送成功后会立即得到响应, 所以单就生产者成功生产消息这一步来说, 其实是同步的;

阻塞: 阻塞体现在, 在等待一件事情的处理结果时, 你是否还去干点其他的事情, 如果不去, 则为 阻塞;

非阻塞: 非阻塞体现在, 在等待一件事情的处理结果时, 你是否还去干点其他的事情, 如果去了, 则为 非阻塞;

结合例子来说

此处找了一位朋友写的例子, 感觉很不错
同步阻塞: 你去 甜在心馒头 店买太极馒头, 阿梅说:"暂时没, 正在蒸呢, 你自己看着点儿!", 于是你就站在旁边只等馒头, 此时的你, 是阻塞的, 也是同步的;

阻塞表现在你除了等馒头,别的什么都不做了;

同步表现在等馒头的过程中, 阿梅不提供通知服务, 你不得不自己主动检查 "馒头出炉" 的消息;

同步非阻塞: 你去甜在心馒头店买太极馒头, 阿梅说:"暂时没, 正在蒸呢, 你自己看着点儿!", 于是你就站在旁边发发微信, 然后问一句:"好了没?", 然后玩玩QQ游戏, 然后再问一句:"好了没?", 此时的你, 是非阻塞的, 不过却还是同步的;

非阻塞表现在你除了等馒头, 自己还在干别的事情;

同步表现在等馒头的过程中, 由于阿梅不提供通知服务, 你不得不自己主动检查 "馒头出炉" 的消息;

异步阻塞: 你去甜在心馒头店买太极馒头, 阿梅说:"暂时没, 正在蒸呢, 蒸好了我打电话告诉你!", 但你依然站在旁边只等馒头, 此时的你, 是阻塞的, 是异步的;

阻塞表现在你除了等馒头, 也没去干点别的什么(比如玩玩手机啥的);

异步表现在等馒头的过程中, 阿梅提供电话通知"馒头出炉"的消息, 你只需要等阿梅的电话;

异步非阻塞: 你去甜在心馒头店买太极馒头, 阿梅说:"暂时没, 正在蒸呢, 蒸好了我打电话告诉你!", 于是你就走了, 去买了双新球鞋, 看了看武馆, 总之, 从此不再过问馒头的事情, 一心只等阿梅电话, 此时的你, 是非阻塞的, 是异步的

非阻塞表现在你除了等馒头, 自己还去干点别的事情;

异步表现在等馒头的过程中, 阿梅提供电话通知"馒头出炉"的消息, 你只需要等阿梅的电话;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30774.html

相关文章

  • Event Loop - JS执行机制

    摘要:心塞塞根据规范,事件循环是通过任务队列的机制来进行协调的。等便是任务源,而进入任务队列的是他们指定的具体执行任务回调函数。然后当前本轮的结束,主线程可以继续取下一个执行。 依然是:经济基础决定上层建筑。 说明 首先,旨在搞清常用的同步异步执行机制 其次,暂时不讨论node.js的Event Loop执行机制,以下关于浏览器的Event Loop执行机制 最后,借鉴了很多前辈的研究文...

    muddyway 评论0 收藏0
  • 一文让你彻底理解 Java NIO 核心组件

    摘要:的出现解决了这尴尬的问题,非阻塞模式下,通过,我们的线程只为已就绪的通道工作,不用盲目的重试了。注意要将注册到,首先需要将设置为非阻塞模式,否则会抛异常。 同步、异步、阻塞、非阻塞首先,这几个概念非常容易搞混淆,但NIO中又有涉及,所以总结一下[1]。 同步:API调用返回时调用者就知道操作的结果如何了(实际读取/写入了多少字节)。 异步:相对于同步,API调用返回时调用者不知道操作...

    guyan0319 评论0 收藏0
  • Java多线程笔记(零):进程、线程与通用概念

    摘要:父进程调用创建子进程。因而,一个进程的第一个线程会随着这个进程的启动而创建,这个线程被称为该进程的主线程。另一方面,线程不可能独立于进程存在。终止线程线程可以通过多种方式来终结同一个进程中的其他线程。 前言 不积跬步,无以至千里;不积小流,无以成江海。在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程、线程以及相关的基础概念。 进程 通常,我们把一个程序的执行称为一...

    blastz 评论0 收藏0
  • JavaScript:彻底理解同步异步和事件循环(Event Loop)

    摘要:例如处理请求的线程处理事件的线程定时器线程读写文件的线程例如在中等等。事件循环事件循环是指主线程重复从消息队列中取消息执行的过程。事件触发时,表示异步任务完成,会将事件监听器函数封装成一条消息放到消息队列中,等待主线程执行。 一. 单线程 我们常说JavaScript是单线程的。 所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个。不妨叫它主线程。 但是实...

    wenyiweb 评论0 收藏0
  • I/O模型和Java NIO源码分析

    摘要:最近在学习网络编程和相关的知识,了解到是模式的网络框架,但是提供了不同的来支持不同模式的网络通信处理,包括同步异步阻塞和非阻塞。因为的版本使用的的模式,而则希望使用模式,而且版本没有将的部分配置项暴露出来,比如说和。   最近在学习Java网络编程和Netty相关的知识,了解到Netty是NIO模式的网络框架,但是提供了不同的Channel来支持不同模式的网络通信处理,包括同步、异步、...

    yuanxin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<