如果你尚未接触过这两个概念,请不要继续往下读。如果您只接触过其中一种,请也不要往下读,读过您会更糊涂。如果你都接触过,也对这两个概念很模糊,请仔细阅读。
首先,这两个概念描述的是不同层面的问题。
异步重点强调的是回调。即数据准备好后,主程序会优先执行回调函数。一般是与用户之间交换的动作,比如AJAX。用户要求点击某个按钮后,不要刷新整个页面。
非阻塞,则是说,程序每次都询问(谁?当然是操作系统)数据准备好了没有。没有就走,有就处理,程序不要等待数据。一般是在处理IO时使用。比如,网络编程,使用非阻塞的方式处理客户端连接,可以高效的处理客户端的请求。
假如以系统IO调用( 可能是读取一个文件,也可能是一个网络请求)为例:
非阻塞图
异步图
主要区别:
可以从上面两张图看出,其主要区别是对从请求数据到数据完全准备好这段时间,异步调用在这段时间内是没有任何动作,而非阻塞调用,则可能在这期间询问了好几次。
在我看来,非阻塞的概念主要用在网络编程上。比如一个web服务器,使用非阻塞的方法,可以将客户端的请求分散化。而在网络编程方面,不可能是异步模型。比如,客户端请求一张图片,你总不能告诉客户端,等我准备好图片再告诉你(虽然实现上可能是这样,但不能说是这种通信是异步的)。通信肯定是同步的。
因此,这两个概念的最大区别是,他们不是一个层次的概念,不能混淆,也不具有可比性。
水平有限,欢迎大家拍砖。
相关推荐
非阻塞 IO 与阻塞 IO 相反,在用户进程调用 recvfrom 系统调用时,kernel 不会阻塞用户进程,而是立即返回一个错误代码,表示当前没有可读数据。用户进程可以继续执行其他任务,而不需要等待数据准备好。 非阻塞 IO...
异步操作可以与阻塞和非阻塞I/O模式结合。在某些系统中,异步操作可能在初始调用时是阻塞的,但在接收到某个信号(比如数据到达)后变为非阻塞。这种模式称为“伪异步”或“半异步”,因为它虽然在某种程度上提高了...
tcp socket同步 异步 阻塞 非阻塞 的解释.zip 基本概念:同步、异步、阻塞和非阻塞的区别 同步异步与阻塞非阻塞的区别 C++ 同步异步与阻塞非阻塞的区别
在软件开发领域,尤其是在涉及输入输出(IO)操作时,理解同步与异步、阻塞与非阻塞的概念是非常重要的。这些概念对于设计和实现高效的程序至关重要,尤其是在高并发和分布式系统中。 一、同步与异步 同步和异步是...
4. **异步非阻塞**:最理想的组合,允许程序在发起一个操作后立即返回,然后在操作完成时通过回调或事件通知调用者。这种方式非常适合高并发环境,如Web服务器、游戏服务器等。 **总结**: - **同步与异步**关注的...
异步的实现方式会有两种:异步阻塞、异步非阻塞;同理,同步也会有两种实现:同步阻塞、同步非阻塞。 阻塞与非阻塞的比较 阻塞和非阻塞是从程序(线程)等待消息通知时的状态角度来说的。阻塞是指调用结果返回之前...
阻塞与非阻塞的区别 阻塞和非阻塞是以是否等待某个资源或操作的完成来定义的。如果某个任务执行时,需要等待某个资源或操作的完成,那么它就是阻塞的;否则,它就是非阻塞的。 Java 中的同步、异步、阻塞和非阻塞 ...
用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制
Socket编程中的阻塞与非阻塞、同步与异步是两个独立的概念,它们涉及的是不同层面的操作机制。这里我们将详细探讨这两个概念以及I/O模型。 首先,同步与异步是客户端(C端)调用服务端(S端)时的行为模式。同步...
### 同步与异步——阻塞与非阻塞型IO详解 ...异步阻塞I/O和异步非阻塞I/O则进一步提高了并发处理能力,尤其是异步非阻塞I/O,是现代高并发系统中的首选模型。理解这些概念对于设计高性能的网络应用至关重要。
在Java编程中,同步、异步、阻塞和非阻塞是四个重要的概念,它们涉及到多线程和并发处理,特别是在网络编程中尤为关键。理解这些概念有助于优化程序性能和提高资源利用率。 1. **同步**: 同步是编程中一种控制机制...
Dart 的高性能异步/非阻塞 Redis 客户端Dart Redis 客户端Dart 的高性能异步/非阻塞 Redis 客户端。客户端经过充分测试,包括支持 UTF-8。由于所有操作都是异步的,它们返回Futures 以更好地处理异步操作。v0.1 发布...
在本文中,我们将探讨异步非阻塞套接字在Winsock编程中的应用,这是开发网络通信程序的基础。异步非阻塞模式是Windows网络通信软件开发中的常见选择,尤其适用于C/S架构的软件。 首先,理解同步和异步、阻塞和非...
异步非阻塞C语言爬虫是一种高效的数据抓取技术,尤其适用于大数据量的网络抓取任务。在本文中,我们将深入探讨这个话题,并详细解释其中涉及的关键技术和概念。 首先,我们来了解一下“异步非阻塞”模式。在传统的...
本文将详细介绍使用Flask实现异步非阻塞请求功能实例解析,通过使用gevent包来实现异步非阻塞请求功能。下面是详细的知识点说明: 一、Flask是什么? Flask是一个使用Python语言的微型Web框架,通过使用Flask可以...
"异步非阻塞socket聊天室程序"是一个使用C++语言,并基于MFC(Microsoft Foundation Classes)库构建的项目,旨在实现高效的多用户通信。下面将详细阐述这个程序背后的关键知识点。 首先,我们关注的是"异步非阻塞...
4. **阻塞与非阻塞与异步的关联** - 非阻塞和异步并不是相互排斥的概念。非阻塞主要是指调用函数时不会立即阻塞当前线程,而是允许线程继续执行其他任务。而异步则关注任务的完成方式,是否需要等待任务完成。非...
【作品名称】:基于stm32单片机的异步非阻塞式处理框架 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:该项目基于M3...
同步异步,阻塞非阻塞,I/O学习总结的思维导图,需要结合Richard Stevens的书来学习
本篇文章将详细讲解基于VC++的异步非阻塞Winsock API的经典源代码实现,以及它所涉及的核心知识点。 首先,我们需要理解"异步非阻塞"的概念。在同步编程中,当一个网络操作(如发送或接收数据)开始时,程序会等待...