例如我平时写的异步委托,如果在多核CPU上执行的话是否真正利用了多核CPU的优势。因为我们知道在单核CPU上的多线程程序其实仅仅是一种假象,并不是真正的多线程.并不能真正提高运算的速度和性能。还有就是我如何制定我的一个线程在指定的CPU上运行.例如我发现某个CPU的运算结束空闲了,我如何能指定其进行新的任务。.net中有否这样的丢进程或者线程的调度类,可以手动操纵。如果不能手动操控,那么线程是如何在多核CPU上分配的?谢谢
1. 单CPU上多线程在某些情况下也可以提高运行速度,比如你的执行过程中有一些IO操作或者对内核对象的调用阻塞等,这时多线程就可以充分利用剩余的CPU资源。
2. 可以调用windows api 来指定某个线程在某个特定的CPU上执行。
API 函数为 SetThreadAffinityMask
参见下面的链接。
http://msdn.microsoft.com/en-us/library/ms686247%28VS.85%29.aspx
如果你不指定,Windows 操作系统会自动选择比较空闲的CPU来进行分配。