同步,异步,阻塞和非阻塞

简介: 同步,异步,阻塞和非阻塞的理解

首先来说下概念:
同步:调用方等待被调用方执行完成,才能继续执行,在被调用方执行期间,调用方会一直等待。
异步:通常是被调用方直接返回一个结果,告诉调用方,我们已经接收到任务了,然后再去慢慢的执行任务。调用方直接获取到了结果,就会继续执行后面的任务。
阻塞:调用方虽然可能已经知道被调用方已经获取到任务了,但是就是想要等待被调用方真正的执行完成。
非阻塞:调用方不关心,也不会等待被调用方完成任务,因为如果有需要,被调用方会来通知调用方。

以上是我对同步与异步,阻塞与非阻塞的个人理解,其实同步和异步,主要是看被调用者的实现方式,而阻塞和非阻塞是由调用者所决定的,下面我们通过一个简单的生活例子来加强我们的理解:
情景一:10个人去面馆吃面,面馆的规矩是排队买面,即一个人付完钱,并取得面后,第二个人才能付钱拿面,这种方式就是同步的方式,效率非常低。
情景二:此时店家想了一个方法,一个人专门负责收钱,一个人专门负责下面,10个人只需要排队付钱,就能拿到小票,这样很快10个人就能完成点餐,而且下面的人也不需要一碗一碗的下了,这种方式就是异步了。
情景三:虽然我们拿到了小票,但是我们不知道自己的面什么时候好,所以我们还是在窗口前等待,这就是阻塞。
情景四:店员在每一碗好的时候,大喊一声小票号,吃面的人听到自己的号再去拿面,期间是不需要傻等,可以玩玩手机,这就是非阻塞。

在代码的角度去理解:
例如我们通过使用callable来开启一个多线程,此时是一次异步操作,如果我们不关心子线程的返回值是什么,那么我们就是非阻塞了,如果我们调用的Future的get方法,那么我们就被阻塞了。

目录
相关文章
Sendmail邮箱API发送邮件的步骤
AokSend教程:使用Sendmail API发送邮件涉及5步。1) 导入sendmail库;2) 连接SMTP服务器(如`smtp.sendmail.com:587`);3) 设置发件人(`sender@example.com`)和收件人(`recipient@example.com`);4) 编写邮件内容,包括主题和正文;5) 使用`sendmail.send()`发送邮件。AokSend提供高效、触达率高的触发式和SMTP/API接口,适合大规模验证码发信服务。
|
编译器 Linux 开发工具
|
供应链 前端开发
阿里成立数据智能新公司,瓴羊的独立始末
(转载报道媒体:晚点LatePost)推动瓴羊形成的过程中,阿里管理层选择了更激进、整合度更高的方案,选择了多平台、多云的定位。中国互联网发展二十多年,从开放走向封闭,或主动或被动,现在它正重新走向开放,这是大势所趋。
阿里成立数据智能新公司,瓴羊的独立始末
|
缓存 资源调度 持续交付
在清空NPM缓存后,检查是否所有依赖都已正确安装
在清空NPM缓存后,检查是否所有依赖都已正确安装
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
385 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
负载均衡 Serverless API
函数计算操作报错合集之如何解决上传二进制包时报错: "Permission denied (os error 13)"
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
253 2
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
219 0
|
安全 Java API
Java多线程编程:使用Atomic类实现原子操作
在Java多线程环境中,共享资源的并发访问可能导致数据不一致。传统的同步机制如`synchronized`关键字或显式锁虽能保障数据一致性,但在高并发场景下可能导致线程阻塞和性能下降。为此,Java提供了`java.util.concurrent.atomic`包下的原子类,利用底层硬件的原子操作确保变量更新的原子性,实现无锁线程安全。
163 0
|
开发框架 算法 测试技术
提升你的VB项目:模块化和代码重构的最佳实践
【4月更文挑战第27天】本文探讨了如何在Visual Basic(VB)项目中实现模块化设计和代码重构,以提升可维护性和可扩展性。通过模块化减少复杂性,遵循高内聚、低耦合原则;利用类、命名空间等实现模块化,借助.NET框架增强灵活性。代码重构包括改进结构、消除重复、封装变化点,利用现代VB特性简化代码,同时重视单元测试和持续集成确保质量。性能优化和案例研究提供实践经验,助力VB项目保持高效和适应未来发展。
304 2
|
监控 安全 Linux
【专栏】拿到一台新的物理服务器,有几项关键的准备工作和安全措施是必须要做的
【4月更文挑战第28天】新服务器部署前,需进行系统初始化(安装OS、网络配置、用户管理)、安全加固(更新补丁、关闭不必要的服务、防火墙设置)和性能优化(调整内核参数、文件系统优化)。同时,设置监控系统(如Nagios)以检查硬件和软件资源,制定备份策略确保数据安全。这些步骤确保服务器稳定、安全、高效运行。
462 1