我对多线程编程和多核使用有一些疑问.
特别是我想知道操作系统和/或框架(这是.NET)如何处理大量使用的核心.
这是关于线程的问题:
我的最后一个问题,基本上是上面的重用,是关于.NET ThreadPool类,它处理诸如.BeginInvoke之类的东西.这堂课有没有做过这些?如果没有,为什么不,或者应该呢?
有没有办法调整这个处理,在操作系统上提示这个特定的线程,当你为它分配一个核心时请多关注它,因为我知道它会使用很多cpu.那会有意义吗?或者"很多cpu"只是相对的,因此不够好?
Tpl并Plinq 自动将工作分配给线程(在core/s ... { 好吧,如果 #threads> #cores那么,> 1个线程将在同一个核心上运行. }).
但是,让我们说我已经 MyMethod1(){..}并且MyMethod2(){..}我需要确保(!)每个都将在不同的核心上运行!(例如密集计算)
我找到的最近的解决方案是Plinq .WithExecutionMode (ParallelExecutionMode.ForceParallelism)
但这是针对一种不同的情况,Plinq可能会认为按顺序而不是并行执行它更好.另外,我不使用Plinq.我只有2种方法需要在不同的核心上运行.
我该怎么做 ?
ps这里有一个答案,建议使用,TaskCreationOptions.LongRunning但它只是暗示TaskScheduler它应该更积极地创建线程池线程.但这些线程可以在同一个核心上.我的情况要求他们处于不同的核心.
谢谢.