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

【压测数据分享】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%

http://www.cnnetsun.cn/news/65056.html

相关文章:

  • LobeChat是否支持Service Worker?离线访问能力构建
  • 重学计算机基础013:减法运算的底层逻辑——为什么没有“减法器”?
  • apk pure安全性争议下,本地大模型成新趋势
  • LobeChat能否支持NFT头像展示?个性化形象设定
  • LobeChat + Kubernetes:大规模部署AI前端界面的可行路径
  • 20万以内家用新能源SUV怎么选?纯电动车型主动安全系统深度对比
  • 基于28DR+VU13P的宽带高速信号处理板
  • AutoGPT镜像上线促销:限时赠送免费Token额度
  • 达人内容乱+不合规?KOL/KOS/KOC/KOC/KOX内容协同+合规管控,品牌调性不跑偏
  • 解锁优质创意素材:这四个专业平台值得收藏
  • 毕设分享 深度学习遮挡下的人脸识别(源码+论文)
  • Python UV搭配Miniconda:下一代包管理体验
  • 实验室装修,怎样做更省心?
  • Redis多数据源配置指南
  • AutoGPT支持ONNX Runtime部署了吗?跨框架兼容测试
  • 零基础小白网络安全入行清单:学技术前,先搞定这6件“小事”
  • 计算机毕业设计springboot小区送货系统 基于SpringBoot的社区末端智能配送平台 面向住宅区的 轻量级电商物流管理系统
  • GitHub组织账号管理Qwen3-32B项目协作开发流程
  • 毕设项目分享 基于大数据的招聘职业爬取与分析可视化
  • vLLM镜像实测:连续批处理让Qwen推理效率翻倍
  • LabVIEW 携手 YOLOv8:全方位视觉处理的奇妙之旅
  • 某雷赛86闭环步进驱动方案-HBS86H整体方案及原理图、PCB、无错无警告代码打包
  • 【从0到1学RabbitMQ】十分钟上手 RabbitMQ:Docker 部署 + Spring Boot 自动化配置全攻略
  • 【论文笔记•(多智能体)】A Knowledge-driven Adaptive Collaboration of LLMs for Enhancing Medical Decision-making
  • 通过SEO推广LobeChat博客内容,带动大模型Token购买转化
  • 【Svelte】重定向页面
  • 基于SpringBoot的日用品仓储管理系统的设计与实现
  • 基于SpringBoot的校园论坛交流系统
  • AutoGPT如何处理模糊目标?自然语言理解边界探讨
  • 清华镜像站推荐:Miniconda下载提速80%的秘密武器