gpt4 book ai didi

c# - ThreadPool 是否会在设置它的代码完成后重置最大线程数?我应该手动执行此操作吗?

转载 作者:行者123 更新时间:2023-11-30 22:25:54 26 4
gpt4 key购买 nike

我已经编写了一些 (c# 3.5) 批处理代码,可以选择性地覆盖线程池 maxthreads。它使用了一些非常繁重的资源,这些资源不是线程安全的,需要为每个事件线程维护一个“资源池”和一个项目。消费应用程序可以限制批处理器将使用的线程数,这又会调用 ThreadPool.SetMaxThreads()。我这样做是为了测试手动设置限制平均性能是否比保留默认设置更好。

我的问题是,我是否应该在每次使用批处理代码后将应用程序的 maxthreads 重置回以前的值?它会在一天中断断续续地被调用,可能会调用数千次。 MaxThreads 限制会一直持续到应用程序重新启动/它被设置为不同的值,还是会自动重置?

虽然这在我的测试工具中并不是一个真正的问题,但我想知道我是否应该更新代码以在批处理完成后处理其他资源以在生产环境中使用时“重置”线程池。将其覆盖是否有任何影响?

最后,在一个 .net 应用程序中设置线程池是为盒子上的所有应用程序设置线程池,还是仅为该单个应用程序的上下文设置线程池?

最佳答案

TL;DR:不要使用 SetMaxThreads

此设置是针对每个进程的:其他进程不受影响,但您的整个应用程序会受到影响!这被称为“局部问题的全局解决方案”,被认为是一件坏事。

您只希望应用的某些部分受此设置影响,但您正在影响整个应用。

例如,如果您将 max-threads 设置为较低的值以限制并发,您将耗尽整个应用程序的其余部分,包括 ASP.NET 请求线程等。

出于这个原因,我总是更喜欢在本地解决此类问题。许多 TPL 基元(PLINQ、Parallel.*)允许您设置最大并行度。对于简单的任务,您可以使用具有固定线程数的自定义任务调度程序(代码在 ParallelExtras 中可用)。

关于c# - ThreadPool 是否会在设置它的代码完成后重置最大线程数?我应该手动执行此操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com