控制dotnet core的ThreadPool中的线程数

时间:2018-03-16 11:57:34

标签: c# .net-core threadpool

我在我的MacOS上运行dotnet核心版本2.1.3,我尝试使用默认的线程池但没有成功。我试过用几种方式修改线程数(我用谷歌搜索了大部分):

Program.cs的

public static void Main(string[] args)
{
    ThreadPool.SetMinThreads(1, 1);
    ThreadPool.SetMaxThreads(1, 1);
    DoSomethingAsync();
}

的.csproj

<PropertyGroup>
  <ServerGarbageCollection>true</ServerGarbageCollection>
  <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
  <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
  <ThreadPoolMinThreads>1</ThreadPoolMinThreads>
  <ThreadPoolMaxThreads>1</ThreadPoolMaxThreads>
</PropertyGroup>

环境变量

$ ComPlus_ThreadPool_ForceMinWorkerThreads=1 ComPlus_ThreadPool_ForceMaxWorkerThreads=1 dotnet run

这些似乎都没有任何效果:

$ ps -M 97046
USER           PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
XXX 97046 s002    0.0 S    31T   0:00.02   0:00.07 dotnet exec /XXX
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 

我在这里缺少什么?该操作系统是否具体?

1 个答案:

答案 0 :(得分:3)

The docs州:

  

您无法设置最大工作线程数或I / O完成次数   线程到一个小于处理器数量的数字   计算机。

鉴于您有8个处理器,因此您无法将其设置为仅一个。

此外,请致电:

ThreadPool.SetMaxThreads(1, 1);

不会将进程限制为单个线程(即使它允许您将其设置为1,但由于1小于8,因此不会将其设置为1)。它只是限制了线程池的大小。该程序可以(并且将会)使用多个线程。

例如,GC可能会在单独的线程上运行。或者您可以创建自己的单独线程(不使用线程池)。限制线程池的最大大小不会影响它。

相关问题