当前位置: 首页 > news >正文

深度解析响应式异步编程模型

上一篇文章中我们聊了一下线程池,基于线程池的多线程编程是我们在高并发场景下提升系统处理效率的有效手段,但却不是唯一的。今天我们来看一下另一种异步开发的常用手段-响应式编程模型

传统多线程模型的缺陷

多线程模型是目前应用最为广泛的并发编程手段,但凡遇到什么性能瓶颈,首先想到的就是弄个线程池把任务丢进去并发执行,但它其实存在一些明显的缺陷。我们先来看一个例子,在一个web服务中,某个接口需要完成如下的任务:

  1. 从数据库中查询一个数据
  2. 调用另一个微服务的接口拿到另一个数据
  3. 将两个数据组合起来并返回给用户

一个简化后的线程处理时序图可能是这样的:
在这里插入图片描述

从上图可以看出,不同用户的请求可以在线程池的线程并发的执行,但是单个用户的处理过程却仍然是串行执行的,而且由于数据库查询,调用微服务接口,写HTTP返回值都是典型的IO操作,导致线程大多数时间都处于阻塞状态。

如果是高并发场景,比如此时有1000个用户同时需要调用该接口,如果没有对线程池的数量加以限制的话,最高可能会创建1000个线程来处理用户请求,而这些昂贵的系统资源偏偏大部分时间都处于阻塞之中,这无疑是一个巨大的浪费。

响应式开发模型

看了上面的例子,小伙伴们很容易想到,如果线程在等待IO的过程中不需要保持活动状态,而能够去处理其它一些无需等待的任务&#x

http://www.lryc.cn/news/378216.html

相关文章:

  • 一个软件是如何开发出来的呢?
  • 宝塔板面有哪些优势
  • Mybatis中BaseEntity作用
  • IDEA2023中使用run Dashboard面板?实现批量运行微服务
  • 分数受限,鱼和熊掌如何兼得?专业or学校,这样选最明智!
  • CentOS 8.5 - 配置ssh的免密登录
  • 反转链表(java精简版)
  • QPair使用详解
  • C# 语言在AGI 赛道上能做什么
  • 微信小程序-API 本地存储
  • TensorFlow音频分类修复
  • C#学习系列之ListView垂直滚动
  • MySQL 常用函数总结
  • SpingBoot快速入门下
  • 什么是symbol?
  • Tailwind CSS 响应式设计实战指南
  • 如何把模糊的图片修复变清晰,怎么做?有那些方法?
  • 思科路由器密码恢复方法
  • HTML某联招聘
  • 第一百一十六节 Java 面向对象设计 - Java 终止块
  • YOLOv10改进 | 注意力篇 | YOLOv10引入YOLO-Face提出的SEAM注意力机制优化物体遮挡检测
  • 问题解决:Problem exceeding maximum token in azure openai (with java)
  • eNSP学习——OSPF在帧中继网络中的配置
  • PHP转Go系列 | 条件循环的使用姿势
  • 八大经典排序算法
  • 【LeetCode热题 100】三数之和
  • 【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具
  • YOLOv10改进 | Neck | 添加双向特征金字塔BiFPN【含二次独家创新】
  • PostgreSQL源码分析——pg_basebackup
  • QT基础 - 常见图表绘制