.Net应用程序运作后会选择哪个CPU核心来处理

.Net应用程序运行后会选择哪个CPU核心来处理?
本机是双核4线程的(从逻辑上看有4个核心),任务管理截图:
.Net应用程序运作后会选择哪个CPU核心来处理

.Net应用程序运行之后,(1)哪个CPU核心(4个核心分别命名为CPU0,CPU1,CPU2,CPU3)将会负责处理这个进程呢?
(2)是操作系统随机选择的还是可以指定某个核心来处理这个进程的呢?
(3)为了提高并发处理,能否让多个核心(比如CPU0和CPU1)同时处理这个进程呢?
------解决思路----------------------
任务管理器--进程--点右键--设置相关性
------解决思路----------------------
不论是 wpf、silverlight还是asp.net,或者是我们说的.net windows服务,都主张写出大量利用多线程处理的程序(当然,不包括滥用线程进行阻塞的代码)。比如说几乎所有的网络 i/o操作、数据库操作可能都是异步设计的(异步的,那么底层实现往往都是多线程的),一个程序中有成千上万处代码都是多线程的逻辑设计。

这样的进程,自然就可以很好地利用 cpu。
------解决思路----------------------
Windows 8也可以设置处理器关联性,在进程选项卡上,从而指定处理器。
但是一般没有必要,操作系统调度更好。操作系统会根据进程亲缘性、功耗等很多考量来调度程序。
比如说,在物理核心有富余的时候,尽量不把两个程序调度给一个CPU内核的两个超线程处理器上,比如尽可能少在NUMA节点之间搬动程序等等。
如果你的程序只使用一个线程,那么就只能利用一个处理器了,无论你怎么设置。
------解决思路----------------------
并行编程 .Net应用程序运作后会选择哪个CPU核心来处理
------解决思路----------------------
windows系统是基于cpu时间片轮询调度线程的
cpu决定用哪个核心去调用哪个线程
有可能这一次调用是第一个核心,等下一次调用就用第二个核心了
当然你可以在进程管理器里指定,但是没有必要这样做,程序也不应该关心到底是哪个核心去执行它

不要太过于纠结底层实现
如果你想学开车,那么你没必要会造车
如果你想学造车,你也没必要去学冶金
不要开个车还要从原子物理开始学起
------解决思路----------------------
都是系统自行分配的。不过,有需要这个的话可以通过API实现自主选择
------解决思路----------------------
一般情况还是交给操作系统来调度更好。如果需要自己设置,.net也提供了Process.ProcessorAffinity和ProcessThread.ProcessorAffinity来设置。实际上就是win32 api SetProcessAffinityMask 和 SetThreadAffinityMask。
------解决思路----------------------
引用:
一般情况还是交给操作系统来调度更好。如果需要自己设置,.net也提供了Process.ProcessorAffinity和ProcessThread.ProcessorAffinity来设置。实际上就是win32 api SetProcessAffinityMask 和 SetThreadAffinityMask。

正解.