dat*_*dev 12 .net c# multithreading numa
我有一台带有2个NUMA节点的服务器,每个节点有16个CPU.我可以看到任务管理器中的所有32个CPU,前2行中的前16个(NUMA节点1)和后2行中的后16个(NUMA节点2).
在我的应用程序中,我开始使用64个线程Thread.Start().当我运行应用程序时,它是CPU密集型的,只有前16个CPU处于忙碌状态,其他16个CPU处于空闲状态.
为什么?我使用Interlocked.Increment()了很多.这可能是个原因吗?有没有办法在特定的NUMA节点上启动线程?
use*_*830 10
除了gcserver我们应该启用GCCpuGroup,Thread_UseAllCpuGroups所以配置应该更像:
<configuration
<runtime>
<gcServer enabled="true"/>
<GCCpuGroup enabled="true"/>
<Thread_UseAllCpuGroups enabled="true"/>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
GcCpuGroup为多个CPU组启用垃圾收集,并Thread_UseAllCpuGroups为运行时启用跨所有CPU组的管理线程分配.
您是否将垃圾收集器设置为服务器版本?
在 app.config 中,尝试:
<configuration
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
由于堆的分配方式,当在多核机器上的大量线程上搅动大量对象/数据时,服务器 GC 会产生巨大的差异。
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |