【发布时间】:2015-01-23 02:37:01
【问题描述】:
我尝试在 Unity 中为线程设置处理器亲和性,正如此处讨论的那样:Set Thread Processor Affinity in Microsoft .Net
但是,以下方法始终打印“Process Thread Count = 0”。创建和启动手动线程并没有改变结果:
void Start()
{
System.Diagnostics.Process process = System.Diagnostics.Process.GetCurrentProcess();
Debug.Log("Process Thread Count = " + process.Threads.Count);
}
所以没有我可以设置关联的线程。有什么我做错了吗?我正在使用基于 Mono 2.0.50727.1433 的 Unity 4.5.1f3!
【问题讨论】:
-
亲和力是线程将使用多少核心。如果您的亲和力等于 2 并且您有 4 个线程,那么它们中的一个将在某一时刻使用 CPU,并且它们将被切换。并且线程数不依赖于亲和力。 Affinity 只是限制活动线程数,但总计数可以远大于 Affinity 数
-
@Sergey:我不太明白你写了什么。据我所知,亲和力是关于允许在哪些内核上运行线程。但是,这甚至不影响我的问题。为什么当前进程中没有线程?不应该至少有一个吗?
-
是的,你是对的。但是线程数可能比核心数大得多。所以
process.Threads.Count不依赖于亲和力。是的,Thread.Count不应该等于 0。在 .Net 应用程序中,根据应用程序类型,至少会有 2-3 个线程。 On是主线程,另一个是GC。也许这是一些 Mono 问题?还是权限问题? -
@Sergey:我知道线程的数量可能比核心数量更大(并且通常更大),并且线程数不依赖于亲和力,但我需要访问所有线程的当前进程找到与我要设置亲和度的当前托管线程对应的 ProcessThread。不过,感谢您提示它是 Mono 或权限问题。
-
您是否尝试过
process.Refresh()所述here?
标签: c# multithreading unity3d mono