高并发场景下如何优化微服务的性能?

本文通过实例探讨了线程执行原理、上下文切换影响、异步优势、IO模型(BIO/NIO/AIO)的区别,揭示了在请求/响应模型中,合理设置并发线程数和使用异步模型的重要性,以提升服务性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把“基础设施优化”这一部分中讲到的一些抽象的概念和方法,用举例子的方式来梳理一遍。总结下的话,就是帮你理清这些问题:

线程到底是如何在 CPU 中执行的?

线程上下文切换为什么会影响性能?

为什么说异步比同步的性能好?

BIO、NIO、AIO 到底有什么区别?

为什么线程数越多反而性能越差?

今天的课程,从一个选择题开始。假设我们有一个服务,服务的业务逻辑和我们每天在做的业务都差不多,根据传入的参数去数据库查询数据,然后执行一些简单的业务逻辑后返回。我们的服务需要能支撑 10,000TPS 的请求数量,那么数据库的连接池设置成多大合适呢?

给你二个选项:

A. 32

B. 2048

我们直接公布答案,选项 A 是性能更好的选择。连接池的大小直接影响的是,同时请求到数据库服务器的并发数量。那我们直觉的第一印象可能是,并发越多总体性能应该越好才对,事实真的是这样吗?下面我们通过一个例子来探究一下这个问题的答案。

说有一个工厂,要新上一个车间,车间里面设置了 8 条流水生产线,每个流水线设置 1 个工位,那需要安排多少个工人才能达到最佳的效率呢?显然是需要 8 个工人是吧?工人少了生产线闲置,工人多了也没有工位让他们去工作,工人闲置,8 个工人对 8 条流水线是效率最优解。这里面的车间,就可以类比为一台计算机,工位就是线程,工人就是 CPU 的核心。通过这个类比,我们就可以得出这样一个结论:一个 8 核的 CPU,8 个线程的情况下效率是最高的。 这时,每个 CPU 核心正好对应一个线程。

这是一个非常理想的情况,它有一个前提就是,流水线上的工人(CPU 核心)一直有事情做,没有任何等待。而现实情况下,我们绝大部分的计算程序都做不到像工厂流水线那么高效。我们开发的程序几乎是请求 / 响应的模型,对应到车间的例子,生产模式不太像流水线,更像是来料加工。工人在工位上等着,来了一件原料,工人开始加工,加工完成后,成品被送走,然后再等待下一件,周而复始。对应到计算机程序中,原料就是请求,工人在工位上加工原料的过程,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值