首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有多个(物理)CPU的系统上的多线程进程中,线程调度是如何处理的?

在具有多个(物理)CPU的系统上的多线程进程中,线程调度是如何处理的?
EN

Stack Overflow用户
提问于 2014-03-09 18:10:59
回答 1查看 1.7K关注 0票数 3

这是一个广泛的问题,但我很好奇在一个具有多个物理CPU的机器上的单个进程应用程序中线程调度的细节。

编辑-想澄清这一点,在下面我谈论的物理CPU。我对进程/线程如何与多核CPU工作有很好的了解,但我说的是主板上的多个物理CPU染料(比如2.4核心Xeons)。

答案--感谢断脚和nosid的响应,我想我已经得到了它:- Linux调度程序有不同的NUMA策略,这些策略会影响线程在核心/染料方面的内存突变/访问模式。-染料之间的缓存一致性是可能的,但速度比预期的要慢。-最佳操作过程-控制共享内存的可更改性(尝试不可变)-使用尊重线程局部性的内部(进程内)任务调度程序-使用与进程内任务调度程序一起工作的NUMA策略。

假设:

  • 缓存一致性是允许多个核心在共享内存上操作的魔力。(已确认)
  • 据我所知,缓存一致性在多个CPU上是可能的,但在性能下降的情况下(Linux 3+,系统有多个现代多核Xeons )。(已确认)

所以情况是:

  • 我有一个多线程的单进程服务.类似的东西。它可以有效地利用多个核,并以一种通常避免cpu核心缓存丢失和一致性滥用的方式划分工作。Executor对任务具有相对的线程亲缘关系.
  • 服务线程可以在进程中利用共享数据(大部分是不可变的)。
  • 服务体系结构的实现方式是,在同一个框上运行多个进程是可能的,但有利的是每个框只有一个进程(共享缓存、资源等)。

问题如下:

  • 是否可以在多个CPU之间实现缓存一致性?有实际意义吗?(在业绩下降时)
  • linux将如何安排CPU之间的线程?(如有可能)
  • 有什么方法可以将进程固定在单个CPU上吗?(已确认)
  • 最终..。我每个CPU和引脚做一个进程吗?或者每盒一个(如果我不使用慢的交叉CPU缓存错误,那就很酷了)(开始听起来像一个进程是好的,只要我的并行任务与某个线程有关联,并且大多数是不可变的数据)。
EN

回答 1

Stack Overflow用户

发布于 2014-03-09 18:25:25

是否可以在多个CPU之间实现缓存一致性?有实际意义吗?

这取决于编程语言、编译器和运行时环境。他们非常小心,您的程序可以使用多个CPU,并且仍然具有一致的内存操作。为此,编程语言通常定义一个所谓的内存模型.

linux将如何安排CPU之间的线程?(如有可能)

没有详细说明,它通常使用所有CPU核心。线程和内核之间没有静态分配。这意味着线程可以在一个内核上运行一段时间,然后在另一个核心上运行一段时间。但是,Linux内核试图将线程保持在内存本地,因为具有多个CPU套接字的系统具有非统一的内存体系结构(NUMA)。

有什么方法可以将进程固定在单个CPU上吗?

是的,去找小矮人。

最终..。我每个CPU和引脚做一个进程吗?或者每盒一台(如果我不用慢的交叉CPU缓存错过的话,那就很酷了)

如果您的应用程序受益于使用共享内存,请每个框使用一个进程。就性能而言,没有不利因素。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22286015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档