fre*_*ish 1 c# threadpool .net-core
我在MacOS上运行dotnet核心版本2.1.3,并且尝试使用默认线程池进行操作没有成功。我试图以几种方式修改线程数(其中大多数是我用谷歌搜索的):
Program.cs
public static void Main(string[] args)
{
ThreadPool.SetMinThreads(1, 1);
ThreadPool.SetMaxThreads(1, 1);
DoSomethingAsync();
}
Run Code Online (Sandbox Code Playgroud)
.csproj
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
<RetainVMGarbageCollection>true</RetainVMGarbageCollection>
<ThreadPoolMinThreads>1</ThreadPoolMinThreads>
<ThreadPoolMaxThreads>1</ThreadPoolMaxThreads>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
环境变量
$ ComPlus_ThreadPool_ForceMinWorkerThreads=1 ComPlus_ThreadPool_ForceMaxWorkerThreads=1 dotnet run
Run Code Online (Sandbox Code Playgroud)
这些似乎都不起作用:
$ 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
Run Code Online (Sandbox Code Playgroud)
我在这里想念什么?该操作系统特定吗?
文档状态:
您不能将辅助线程或I / O完成线程的最大数量设置为小于计算机上的处理器数量。
由于您有8个处理器,因此不能将其设置为仅一个。
此外,致电:
ThreadPool.SetMaxThreads(1, 1);
Run Code Online (Sandbox Code Playgroud)
不会将您的进程限制为单个线程(即使您将其设置为1,也不会因为1小于8而不会)。它只是限制了线程池的大小。该程序可以(并且将)仍然使用多个线程。
例如,GC可能会在单独的线程上运行。或者,您可以创建自己的单独线程(不使用线程池)。限制线程池的最大大小不会对此产生影响。
| 归档时间: |
|
| 查看次数: |
3836 次 |
| 最近记录: |