因为中文语意的问题,很多时候确实会导致混用,而且语境不一样意义也可能不一样。如果只是从计算机编程这个角度说, 讨论最多的也是IO模型 ,阻塞非阻塞和同步异步说的应该是不同的东西。
阻塞非阻塞:可以简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。
同步异步: 你总是做完一件再去做另一件,不管是否需要时间等待,这就是同步;异步呢则反之,你可以同时做几件事,并非一定需要一件事做完再做另一件事。同步简单理解成一问一答同步进行,异步可以简单理解为不必等一个问题有答了再去问另一个问题,尽管问,有答了再通知你。
举个例子:
我去买一本书,立即买到了,这就是非阻塞;
如果恰好书店没有,我就等一直等到书店有了这本书买到了才走,这就是阻塞;
如果书店恰好没有,我就告诉书店老板,书来了告诉我一声让我来取或者直接送到我家,然后我就走了,这就是异步。
那同步呢? 前面两种情况,非阻塞和阻塞都可以称为同步。
如果说书店有这书,我还让老板通知我以后来取就没这个必要了。
反映在编程方面就是 用户进程 调用 系统调用。(用户进程对应我,内核 对应 书店老板,书对应数据资源data , 买书就是一个系统调用了)
这阻塞非阻塞与同步异步IO机制,都是伴随计算机系统发展,用来解决一些出现的问题。阻塞非阻塞、同步异步可以组合,但是没必要组合,应该说是不同的IO机制,没必要纠结怎么区分,如果定要组合心里才爽,可以 这样认为:阻塞非阻塞都是同步,异步就没什么阻塞不阻塞了,都异步了还阻塞啥,肯定是非阻塞了。(异步非阻塞听起来多别扭)
分享到:
相关推荐
Java 同步、异步、阻塞和非阻塞分析 Java 中的同步、异步、阻塞和非阻塞是四个相关但不同的概念,它们都是在多线程编程中解决耗时操作的方法。在这里,我们将详细介绍这些概念之间的区别和联系。 同步...
在Java编程中,同步、异步、阻塞和非阻塞是四个重要的概念,它们涉及到多线程和并发处理,特别是在网络编程中尤为关键。理解这些概念有助于优化程序性能和提高资源利用率。 1. **同步**: 同步是编程中一种控制机制...
在IT领域,尤其是在多线程和并发编程中,同步、异步、阻塞和非阻塞是四个非常关键的概念。这些概念通常与操作系统、网络I/O、数据库操作以及Java等编程语言中的线程管理紧密相关。现在让我们逐一深入探讨它们的含义...
这里我们将深入探讨同步IO、异步IO、阻塞IO和非阻塞IO的概念,理解它们的工作原理以及在实际应用中的差异。 1. 同步IO与异步IO: - **同步IO**:在同步模式下,应用程序执行I/O操作时会等待操作完成。这意味着程序...
总结来说,Java中的同步、异步、阻塞和非阻塞是处理并发和IO操作时的重要策略。同步与异步关注任务的执行顺序,而阻塞与非阻塞关注程序执行流程是否会被中断。理解并合理运用这些概念,可以帮助开发者编写出更加高效...
《JAVA并发编程艺术》是Java开发者深入理解和掌握并发编程的一本重要著作,它涵盖了Java并发领域的核心概念和技术。这本书详细阐述了如何在多线程环境下有效地编写高效、可靠的代码,对于提升Java程序员的技能水平...
第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 ...第15章 原子变量与非阻塞同步机制 第16章 Java内存模型 附录A 并发性标注 参考文献
非阻塞同步通过比较交换算法(CAS)实现,它通常比传统锁更快,但可能会面临ABA问题。非阻塞同步还包括无锁(Lock-free)和无障碍(Obstruction-free)算法。 11. 并发工具类 Java并发工具类扩展了基本的并发功能,...
【Java语言异步非阻塞设计模式】 异步非阻塞设计模式是现代软件开发中提高性能的关键技术,尤其在处理I/O密集型任务时,它能显著提升系统的并发能力和资源利用率。在这种模型中,系统在发起耗时操作后不会等待结果...
《Java并发编程:设计原则与模式(第二版)》是一本深入探讨Java多线程编程技术的权威著作。这本书详细阐述了在Java平台中进行高效并发处理的关键概念、设计原则和实用模式。以下是对该书内容的一些核心知识点的概述...
总的来说,"java并发(二十四)多线程结果组装"这个主题涵盖了许多高级Java并发技术,如线程池、异步计算、结果合并以及异常处理。理解和掌握这些技术对于编写高效率、健壮的并发代码至关重要。通过实际项目中的实践...
总之,Java并发程序设计是一门深奥且实用的技术,涉及到线程管理、同步机制、并发工具和内存模型等多个方面。通过学习本教程,开发者可以掌握在Java环境中编写高效、可靠的并发程序所需的技能。
5. **NIO(非阻塞I/O)**: Java的`HttpAsyncClient`依赖于Java NIO(非阻塞I/O)来实现异步操作。NIO允许单个线程处理多个连接,显著提高了系统资源的利用率。 6. **线程池**: `HttpAsyncClient`通常会使用线程池来...
6. **BackgroundTask.java**:后台任务通常是指在主程序运行时执行的非阻塞任务,如定时任务或者异步数据处理。在Java中,可以使用`ExecutorService`和`Future`来管理和调度这些任务,以提高程序的响应速度和并发...
4. **非阻塞并发**:使用非阻塞算法,如CAS(Compare and Swap),可以在无锁的情况下实现并发,提高系统性能。 5. **避免长时间持有锁**:减少线程持有锁的时间,降低发生竞争的概率。 三、并发编程模式 1. **生产...
Future接口和FutureTask类用于表示异步计算的结果,可以配合线程池使用,实现非阻塞调用和结果的最终获取。 ### 高级并发对象 Java还提供了一些高级并发对象,如AtomicInteger、AtomicReference等原子类,它们提供...
5. Lock-free编程:Lock-free是无锁编程的一种实践,它尝试使用非阻塞算法来避免锁的使用,从而减少锁竞争导致的性能损耗。Java提供了atomic包来实现锁无关的操作,例如AtomicInteger、AtomicLong等原子变量。...
synchronized提供了一种内置的、不可中断的锁机制,而Lock接口提供了更细粒度的控制,如可重入、公平性和非阻塞尝试获取锁的能力。乐观锁和悲观锁也是并发控制策略,它们在数据库操作中广泛应用,例如Java的JPA和...
`Future`对象用于获取异步任务的结果,支持阻塞和非阻塞两种模式,是处理异步计算结果的标准方式。掌握`ExecutorService`和`Future`对于构建高效、可伸缩的并发应用程序至关重要。 ### 阻塞队列 阻塞队列是Java并...