多线程并发写法不规范导致机器负载过大

文章讨论了下午4点服务器CPU占用率高的问题,原因是服务中Parallel.ForEach的并发设置导致无限并发。作者指出,虽然MaxDegreeOfParallelism试图限制并发,但await方法不阻塞主流程,实际效果不佳。解决方案是将异步方法改为同步,以降低并发数防止资源耗尽。

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

问题描述:每天下午4点开始,服务器CPU跑满,但是该服务和服务器并不宕机
原因定位:观察进程状态发现并发线程数非常多,怀疑同步代码没有合理的控制并发任务数量,review代码发现使用了Parallel且委托方法内有异步方法

ParallelOptions options = new ParallelOptions

{

    MaxDegreddOfParallelism = n

};

Parallel.ForEach(list, options, async p=>{

    await DoSomethingAsync();

});

需注意,以上代码并不能控制同时只有n个并发进入DoSomethingAsync方法,await的方法不会阻塞主流程代码执行,因此此方法会无限并发直至资源耗尽.


解决方案:降低并发数,异步改为同步
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值