news 2026/6/10 4:09:32

【压测数据分享】C#的 `ThreadPool.SetMaxThreads()` 配置最大线程数到底对性能有多大影响

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【压测数据分享】C#的 `ThreadPool.SetMaxThreads()` 配置最大线程数到底对性能有多大影响

结论

先说结论:

以 async 的方法 + kestrel 库来提供 http 服务,性能非常强悍。直观感受上,性能不输 golang.

物理线程的数量必然影响性能:

ThreadPool.SetMinThreads( 4,4) ThreadPool.SetMaxThreads(4,4) 线程池的线程数与核数一致时,性能最好。(CPU 占用达到 360%)

不限制线程池的最大和最小线程数,性能下降约 1.37%。猜测在任务更复杂的情况下,下降的比例会更明显。(CPU 占用达到 360%)

ThreadPool.SetMinThreads( 2,2) ThreadPool.SetMaxThreads(2,2) 当线程池最大值只有核数的一半时,性能下降 51.07% (CPU 占用达到 215%)

程序中宜限制线程池最大线程数不要超过核数,否则一定产生劣化影响。

从稳定性考虑:线程池最大值 = 核数 - 1 是个好主意。

某些特定任务可以开额外的线程来运行

负责处理请求的线程数稳定,不至于在过载的时候完全卡死整个应用。

最重要的:kestrel 的处理路径上完全 async,没有阻塞!

实验方法

使用 DotNet 的 Kestrel 库开发一个 http 1.1 的 echo 服务器(请求后,把请求头作为输出)

使用了自定义的 metrics 统计方式

往 stdout 输出了 json 格式的请求流水日志

编译为 linux 下的二进制程序

编译参数如下:

dotnet publish $(PROJECT) -c Release -r linux-x64 -p:PublishAot=true --self-contained true -o $(PUBLISH_DIR)

在基础镜像 mcr.microsoft.com/dotnet/aspnet:8.0 中运行

docker 运行时绑定到固定的 cpu 上:

使用 4 个 cpu 核

docker run \

-d \

--name=kestrel_exp_0 \

--rm \

--cpuset-cpus="8,9,10,11" \

-m 1G \

-p 8081:8081 \

kestrel-server:latest \

/app/KestrelServer -addr=0.0.0.0:8081 -threadpool.min=4 -threadpool.max=4

关键实验代码如下:

if (minThreads > 0)

{

ThreadPool.SetMinThreads(minThreads, minThreads);

}

if (maxThreads > 0)

{

ThreadPool.SetMaxThreads(maxThreads, maxThreads);

}

实验数据:

qps CPU

Threadpool.MaxThread = 核数 88594.4 / core / s 360%

Threadpool.MaxThread 不限制 87164.7 / core / s 360%

Threadpool.MaxThread = 核数 / 2 58645.8 / core / s 215.70%

Threadpool.MaxThread = 核数 * 2 81888.8 / core / s 315%

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:56:58

AutoGPT任务执行透明度报告生成器开发中

AutoGPT任务执行透明度报告生成器开发中 在AI从“工具”向“协作者”演进的今天,我们正面临一个关键矛盾:智能体越强大,其行为就越难以追踪。当AutoGPT类系统能自主完成调研、编程、写作等复杂任务时,用户不禁会问:“它…

作者头像 李华
网站建设 2026/6/9 18:58:19

linux操作系统 包管理工具 包括国产操作系统

各系统的包管理工具介绍 现阶段多种操作系统、多种不同版本,相继有好几个包管理工具,就RHEL/Centos就有rpm、yum、dnf三种,Ubuntu有dpdk、apt、apt-get等,还有一些跨发行版本,以及通用软件管理方式pip、pip3&#xff…

作者头像 李华
网站建设 2026/6/10 13:15:33

鸿蒙 Electron 与元宇宙融合实战:跨端沉浸式虚拟交互解决方案

鸿蒙Electron与元宇宙融合实战:跨端沉浸式虚拟交互解决方案 元宇宙通过构建与物理世界平行的虚拟空间,实现“沉浸式体验-虚拟协同-虚实联动”的全新交互模式,而鸿蒙Electron凭借跨端协同、端侧实时计算、多设备适配能力,成为元宇…

作者头像 李华
网站建设 2026/6/9 22:50:31

计算机毕业设计springboot基于web的自定义预约系统 基于SpringBoot的Web端灵活预约平台设计与实现 融合SpringBoot的在线可配置预约服务系统开发

计算机毕业设计springboot基于web的自定义预约系统a51diz58 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。移动互联网把“随时办”变成常态,却仍面临“排队久、改约…

作者头像 李华
网站建设 2026/6/10 11:17:42

20万以内新能源SUV主动安全系统排行榜:实测满载跑高速,纯电动车型刹车与车道保持表现

随着新能源技术不断进化,20 万元以内的纯电 SUV 市场已经从单纯追求续航和性价比,转向对主动安全系统表现的深度考量。对于日常高速满载出行来说,刹车响应、车道保持稳定性、自适应巡航系统表现等主动安全功能,直接关系到行驶安全…

作者头像 李华
网站建设 2026/6/10 7:01:48

21、Python开发DB2应用程序全攻略

Python开发DB2应用程序全攻略 在Python开发中,与DB2数据库进行交互是一项常见的任务。为了实现高效、便捷的交互,我们可以使用 ibm_db 驱动,它能提供出色的性能和丰富的功能支持。下面将详细介绍如何使用 ibm_db 驱动进行DB2数据库的连接、数据操作等。 1. 环境准备 在…

作者头像 李华