Csharp/C#教程:为每个线程分配一个cpu核心分享


为每个线程分配一个cpu核心

我有一个用.net 4编写的Windows服务,它使用Threads定期做作业。 服务器有超过20个CPU核心。

我在我的Windows服务中创建10个线程。 是否可以为每个线程分配一个cpu核心?

操作系统已经完全适合您。 它并不能保证每个线程永远保持在同一个内核上(并且几乎在所有情况下都不需要),但它确实尽可能地保持尽可能多的内核。 这意味着尽可能地为所有可用线程提供自己的核心。

通过访问本机Win32系统调用,特别是SetThreadAffinityMask ,可以实现 。 你需要做一些DllImports:

[DllImport("kernel32.dll")] static extern IntPtr GetCurrentThread(); [DllImport("kernel32.dll")] static extern IntPtr SetThreadAffinityMask(IntPtr hThread, IntPtr dwThreadAffinityMask); 

然后在每个衍生的线程中使用它们(当然,使用不同的掩码参数):

 // set affinity of current thread to the given cpuID SetThreadAffinityMask(GetCurrentThread(), new IntPtr(1 << (int)cpuID)); 

警告:不保证.NET线程和OS线程之间的直接关联,至少根据这一点: http : //msdn.microsoft.com/en-us/library/74169f59.aspx

操作系统ThreadId与托管线程没有固定关系,因为非托管主机可以控制托管和非托管线程之间的关系。 具体而言,复杂的主机可以使用Fiber API针对同一操作系统线程调度许多托管线程,或者在不同的操作系统线程之间移动托管线程。

上述就是C#学习教程:为每个线程分配一个cpu核心分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1000081.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐