同步和异步与阻塞与非阻塞是在通信和I/O中常用的字眼,之前在许多地方同步与阻塞,异步与非阻塞常常被混为一谈,带来了许多混乱,其实同步、异步和阻塞、非阻塞是两个不同的概念。最近随着异步IO(AIO)越来越多的应用,对这两个概念进行区分和解释的文章也越来越多,但是问起身边的同学,能说清楚的倒也不多,所以我就顺便跟风写一篇科普文吧.
同步(synchronous)和异步(asynchronous)其实是针对消息的发送和接受的次序而言的(在通信中就是消息的发送和接收,在IO中就是数据的读和写)。同步的意思就是消息的发送和接收是有序的,即接收和发送第二个包一定在第一个包之后第三个包之前,而不是乱序。异步的意思就是消息的发送和接收是可以乱序的,第一个包没发完可以直接发第二个包。
至于阻塞(block)和非阻塞(non-block)其实描述的是进程或线程进行等待时的一种方式。阻塞的意思是等待时进程或线程需要挂起,而非阻塞则是等待时线程或进程不需要被挂起,不影响线程的执行,这时线程或进程可以继续处理其它事物,不因为这个等待而受到影响(当然它仍然在等待这个消息,只不过可能会在线程或进程执行周期的某一个地方去查看消息的通知,而不是立即在原地等待)。
举个例子,两个人之间发短信,最简单的就是同步阻塞的方式,一个人发短信,然后啥也不干地等在手机前面,直到对方回信,接下来才发第二条短信(这时也确认了第一条短信已发到)。而同步非阻塞方式也就是大家常用的方式,则是发出去消息,然后去干别的事,(体现了非阻塞)等对方回短信之后(相当于确认了第一条短信已收到,并且有后续数据过来),再发第二条短信(体现了同步)。异步阻塞的方式,则是一口气发出几十条短信(由于中国移动并不保证发出短信的先后顺序,可能导致对方收到短信的顺序和发出去时不一致,这就体现了异步的概念,而且理论上发信的顺序也可以是乱的),发完之后就啥也不干,等对方一条一条的回信(这体现了阻塞的概念)。而如果在一口气发出几十条短信后没有傻傻的等待,而是去别的地方玩去了,对方的回信到一条读一条,则就变成异步非阻塞的方式了。
不知道通过上面的例子,大家是不是已经可以理解这两组概念之间的区别了。这里有篇相关的文章写得不错,如果还有些不理解的,可以再去阅读一下。由于国内在IT领域的起步落后国外(主要是美国)一些年份,再加上互联网的迅速普及,导致许多以讹传讹的现象时有发生。这两组本来适用范围并不相同的概念却在很长一段时间内被混为一谈,应该就是这方面的例子。这种错误增加了大家的学习成本,也不利于在某一些领域的进一步研究,所以个人以为搞清楚这些概念还是很有必要的
相关推荐
在实际应用中,同步和异步关注的是通知消息的机制,而阻塞与非阻塞关注的是程序等待消息时的状态。同步和异步决定了调用者是等待函数返回结果,还是继续执行其他操作。阻塞与非阻塞则决定了调用者是否在等待过程中...
理解同步/异步与阻塞/非阻塞的区别后,我们可以进一步探讨这两种机制的组合应用。 1. **同步阻塞**:最常见的组合之一,适用于简单且对实时性要求不高的应用场景。例如,使用阻塞式的方法读取文件或数据库查询。 2...
在计算机编程和系统设计中,异步、同步、阻塞和非阻塞是四个非常重要的概念,它们关乎程序执行效率和资源管理。以下是对这些概念的详细解释。 **同步与异步** 同步(Synchronous)是指一个进程或线程在等待另一个...
同步异步阻塞非阻塞 IO 模型 在 Linux 环境下的网络 IO 中,有五种基本的 IO 模型:阻塞 IO、非阻塞 IO、IO 多路复用、信号驱动 IO 和异步 IO。其中,信号驱动 IO 不常用,因此主要介绍其余四种 IO 模型。 1. 阻塞...
tcp socket同步 异步 阻塞 非阻塞 的解释.zip 基本概念:同步、异步、阻塞和非阻塞的区别 同步异步与阻塞非阻塞的区别 C++ 同步异步与阻塞非阻塞的区别
Java 同步、异步、阻塞和非阻塞分析 Java 中的同步、异步、阻塞和非阻塞是四个相关但不同的概念,它们都是在多线程编程中解决耗时操作的方法。在这里,我们将详细介绍这些概念之间的区别和联系。 同步...
在计算机科学中,同步、异步、阻塞与非阻塞是四个紧密相关的概念,它们都是关于任务或进程之间的交互和通信方式的描述。下面将对这四个概念进行详细的介绍和比较。 同步(Synchronous) 同步是指任务之间的依赖...
Socket编程中的阻塞与非阻塞、同步与异步是两个独立的概念,它们涉及的是不同层面的操作机制。这里我们将详细探讨这两个概念以及I/O模型。 首先,同步与异步是客户端(C端)调用服务端(S端)时的行为模式。同步...
在计算机编程,特别是网络编程中,同步、异步、阻塞和非阻塞是四个关键的概念,它们描述了程序执行时处理任务的方式。 同步是一种调用模式,它要求调用者在等待结果返回之前不能继续执行其他任务。例如,当你调用`...
用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制
在Java编程中,同步、异步、阻塞和非阻塞是四个重要的概念,它们涉及到多线程和并发处理,特别是在网络编程中尤为关键。理解这些概念有助于优化程序性能和提高资源利用率。 1. **同步**: 同步是编程中一种控制机制...
JAVA 同步、异步、阻塞和非阻塞之间的区别 在软件开发中,同步、异步、阻塞和非阻塞都是非常重要的概念,它们之间的区别是很多开发者经常混淆的。今天,我们将详细介绍JAVA同步、异步、阻塞和非阻塞之间的区别。 ...
### 同步与异步——阻塞与非阻塞型IO详解 #### 一、引言 在计算机科学中,I/O(输入/输出)操作是任何程序与外部世界交互的基础。根据I/O操作的不同特性,可以将其分为四大类:同步阻塞IO、同步非阻塞IO、异步阻塞...
在IT领域,尤其是在多线程和并发编程中,同步、异步、阻塞和非阻塞是四个非常关键的概念。这些概念通常与操作系统、网络I/O、数据库操作以及Java等编程语言中的线程管理紧密相关。现在让我们逐一深入探讨它们的含义...
在计算机科学中,同步、异步、阻塞和非阻塞是并发编程中的核心概念,它们关乎程序如何处理数据输入/输出(I/O)操作。这些概念的理解对于编写高效的并发应用至关重要。 同步与异步主要关注的是数据处理的顺序和控制...
这里我们将深入探讨同步IO、异步IO、阻塞IO和非阻塞IO的概念,理解它们的工作原理以及在实际应用中的差异。 1. 同步IO与异步IO: - **同步IO**:在同步模式下,应用程序执行I/O操作时会等待操作完成。这意味着程序...
### 一文理解异步同步阻塞与非阻塞 #### 同步与异步 ...通过以上的解释和示例,我们可以更好地理解同步与异步、阻塞与非阻塞以及不同I/O模型之间的差异。这些概念对于软件开发特别是高性能服务器端开发非常重要。
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...
【Linux网络编程】同步、异步、阻塞与非阻塞的概念在计算机科学特别是网络编程领域至关重要。在Linux环境下,理解和运用这些概念对于优化应用程序性能和处理并发I/O至关重要。 同步(Synchronous)I/O指的是应用...
同步和异步的区别在于数据访问时是否使进程阻塞,而阻塞和非阻塞的区别在于调用是否立即返回,无论数据是否准备好。 需要注意的是,同步和异步是客户端的视角,而阻塞和非阻塞是服务器的视角。同步和异步主要由...