关于多线程、高并发的一次探索

本文介绍了如何通过测试确定最佳线程并发数以优化Java接口性能,实现系统吞吐量最大化。并通过使用Java并发工具如ExecutorService、CountDownLatch和Semaphore解决任务排队及任务拒绝等问题。

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

最近在开发一个接口,接收任务、数据库处理,并返回处理结果。倒腾完功能后,一如既往地进行性能提升。

这里的主要思路是,通过测试找到系统到达最大吞吐量时(其实是数据库吞吐量),对应的线程并发数。然后限制线程的最高并发数。以让系统的性能达到最优。我把吞吐分两种,程序的吞吐(与cpu,内存,网络等资源相关)和数据库的吞吐。系统吞吐量则是由这两种吞吐中较弱的决定。我这个案例中,由数据库吞吐量决定。

举个例子,通过测试发现,并发线程为15时,系统平均每秒钟处理的任务最多(吞吐量最大)。则将系统的最大并发数限制为15.系统就会以最佳的状态运行。

猜测最佳并发数是10左右,那先10个线程并发,测10个任务看看。

 

以上是每个任务耗时,1268ms完成了所有任务。所以,每秒吞吐量tps=10/1.271=7.88

.....继续测>10和<10的并发数,最后得出结果:10个线程并发,吞吐量最大。

 

接下来进行最大线程数的限制,由于lz使用java语言,java提供了方便快捷的并发编程工具ExecutorService,这个随便搜一下就很多介绍。java6以上可用。

使用时注意 ExecutorService的十个使用技巧

此时系统已经能够确保同时进行数据库操作的任务最多只有10个。剩下的排队吧。

排队引入了一个问题,有些任务会排很久才能得到处理。而接口的要求是1秒内必须返回。怎么办?只能使用异步了,java提供了辅助并发编程的工具CountDownLatch。

于是我在程序里加了一行代码 latch.await(1000,TimeUnit.MILLISECONDS); 意思是,我等你1000ms,你做完了告诉我,我接着做下面的事。1000ms后没做完,我也接着做下面的事。问题解决了。附上一些并发编程工具类的资料 Java并发编程

 

还差一步,ExecutorService会对超出的任务数进行拒绝,所以为了让所有进入系统的任务都得到执行,还得限制进入的任务数。

java又提供了另一个辅助并发编程的工具Semaphore,信号量。执行任务前,先判断position.availablePermits()>0?,意思是,是否还有许可去执行这个任务,若有,则执行,完了释放许可。若没有,则等待许可。我等待许可的代码是:Thread.sleep(1500);再判断 position.availablePermits(),1500ms是我的任务的大概执行时间。你也可以不sleep,直接不停地进行判断,这个判断不会耗很多资源。

 

到这里,系统的性能优化就完了。准确地说,是前端程序的优化,不包括数据库处理的优化。

 

题外话,这是lz第一次尝试写博客。博客中有错误的话,欢迎大家指出,感谢csdn这个平台提供资源让我们进步!

 

电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值