这是一个广泛的问题,但我很好奇在一个具有多个物理CPU的机器上的单个进程应用程序中线程调度的细节。
编辑-想澄清这一点,在下面我谈论的物理CPU。我对进程/线程如何与多核CPU工作有很好的了解,但我说的是主板上的多个物理CPU染料(比如2.4核心Xeons)。
答案--感谢断脚和nosid的响应,我想我已经得到了它:- Linux调度程序有不同的NUMA策略,这些策略会影响线程在核心/染料方面的内存突变/访问模式。-染料之间的缓存一致性是可能的,但速度比预期的要慢。-最佳操作过程-控制共享内存的可更改性(尝试不可变)-使用尊重线程局部性的内部(进程内)任务调度程序-使用与进程内任务调度程序一起工作的NUMA策略。
假设:
所以情况是:
问题如下:
发布于 2014-03-09 18:25:25
是否可以在多个CPU之间实现缓存一致性?有实际意义吗?
这取决于编程语言、编译器和运行时环境。他们非常小心,您的程序可以使用多个CPU,并且仍然具有一致的内存操作。为此,编程语言通常定义一个所谓的内存模型.
linux将如何安排CPU之间的线程?(如有可能)
没有详细说明,它通常使用所有CPU核心。线程和内核之间没有静态分配。这意味着线程可以在一个内核上运行一段时间,然后在另一个核心上运行一段时间。但是,Linux内核试图将线程保持在内存本地,因为具有多个CPU套接字的系统具有非统一的内存体系结构(NUMA)。
有什么方法可以将进程固定在单个CPU上吗?
是的,去找小矮人。
最终..。我每个CPU和引脚做一个进程吗?或者每盒一台(如果我不用慢的交叉CPU缓存错过的话,那就很酷了)
如果您的应用程序受益于使用共享内存,请每个框使用一个进程。就性能而言,没有不利因素。
https://stackoverflow.com/questions/22286015
复制相似问题