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

freecodex 2015-02-03 10:41:57
本机是双核4线程的(从逻辑上看有4个核心),任务管理截图:


.Net应用程序运行之后,(1)哪个CPU核心(4个核心分别命名为CPU0,CPU1,CPU2,CPU3)将会负责处理这个进程呢?
(2)是操作系统随机选择的还是可以指定某个核心来处理这个进程的呢?
(3)为了提高并发处理,能否让多个核心(比如CPU0和CPU1)同时处理这个进程呢?
...全文
328 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lincolnandlinda 2015-02-04
  • 打赏
  • 举报
回复
引用 10 楼 github_22161131 的回复:
一般情况还是交给操作系统来调度更好。如果需要自己设置,.net也提供了Process.ProcessorAffinityProcessThread.ProcessorAffinity来设置。实际上就是win32 api SetProcessAffinityMaskSetThreadAffinityMask
正解.
winnowc 2015-02-04
  • 打赏
  • 举报
回复
一般情况还是交给操作系统来调度更好。如果需要自己设置,.net也提供了Process.ProcessorAffinityProcessThread.ProcessorAffinity来设置。实际上就是win32 api SetProcessAffinityMaskSetThreadAffinityMask
WM_JAWIN 2015-02-04
  • 打赏
  • 举报
回复
都是系统自行分配的。不过,有需要这个的话可以通过API实现自主选择
於黾 2015-02-04
  • 打赏
  • 举报
回复
你编个程序让计算机执行 好比你写个任务书让设计院出图纸一样 你不要去关心设计院到底出几个人,到底派哪个人给你画图纸
於黾 2015-02-04
  • 打赏
  • 举报
回复
windows系统是基于cpu时间片轮询调度线程的 cpu决定用哪个核心去调用哪个线程 有可能这一次调用是第一个核心,等下一次调用就用第二个核心了 当然你可以在进程管理器里指定,但是没有必要这样做,程序也不应该关心到底是哪个核心去执行它 不要太过于纠结底层实现 如果你想学开车,那么你没必要会造车 如果你想学造车,你也没必要去学冶金 不要开个车还要从原子物理开始学起
by_封爱 版主 2015-02-04
  • 打赏
  • 举报
回复
并行编程
threenewbee 2015-02-03
  • 打赏
  • 举报
回复
Windows 8也可以设置处理器关联性,在进程选项卡上,从而指定处理器。 但是一般没有必要,操作系统调度更好。操作系统会根据进程亲缘性、功耗等很多考量来调度程序。 比如说,在物理核心有富余的时候,尽量不把两个程序调度给一个CPU内核的两个超线程处理器上,比如尽可能少在NUMA节点之间搬动程序等等。 如果你的程序只使用一个线程,那么就只能利用一个处理器了,无论你怎么设置。
freecodex 2015-02-03
  • 打赏
  • 举报
回复
引用 1 楼 liucqa 的回复:
任务管理器--进程--点右键--设置相关性
win7可设置,但是在win8.1中没找到,取消掉了?
  • 打赏
  • 举报
回复
不论是 wpf、silverlight还是asp.net,或者是我们说的.net windows服务,都主张写出大量利用多线程处理的程序(当然,不包括滥用线程进行阻塞的代码)。比如说几乎所有的网络 i/o操作、数据库操作可能都是异步设计的(异步的,那么底层实现往往都是多线程的),一个程序中有成千上万处代码都是多线程的逻辑设计。 这样的进程,自然就可以很好地利用 cpu。
  • 打赏
  • 举报
回复
windows任务默认是按照线程来分配CPU的,你是从什么 linux 的书上学到的“将会负责处理这个进程”的概念吧。
泡泡龙 2015-02-03
  • 打赏
  • 举报
回复
任务管理器--进程--点右键--设置相关性

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧