处理器使用和核心使用

处理器使用和核心使用

我想尝试一下线程和并行性。我知道我的处理器有多个内核,但不知道如何查看每个内核上发生的情况。访问此信息的正确方法是什么?

更具体地说,我正在计划以下内容:我想象编写一个启动多个线程的小程序,然后这些线程应该分布在核心上并在需要时相互通信。我希望能够观察哪个线程正在运行,有什么提示吗?

我对尝试这种事情完全陌生(我也很高兴与此相关的任何信息不直接解决这个问题)。

最好的,巴特

(谷歌搜索只让我找到“cat /proc/cpuinfo”,这似乎告诉我我有 7 个处理器。这不是事实,这告诉我我不知道如何读取这个输出。)

答案1

每个核心都有自己的条目/proc/cpuinfo,因此这里有很多冗余信息。

要了解您拥有多少个 cpu 和/或核心,请执行以下操作:

# egrep 'processor|core id|physical id' /proc/cpuinfo
processor   : 0
physical id : 0
core id     : 0
processor   : 1
physical id : 0
core id     : 1

这是在我的单芯片双核计算机上运行的。所以我有两个核心,编号为0和1,但是它们都属于物理cpu 0。

记住,计算机专家喜欢从 0 开始数。

以下是双 CPU、单核系统的输出:

$ egrep 'processor|core id|physical id' /proc/cpuinfo
processor       : 0
processor       : 1

所以我有两个 CPU,但由于没有指定内核,所以我知道每个处理器芯片都有一个内核。

还有一点更有趣:

$ egrep 'processor|core id|physical id' /proc/cpuinfo
processor       : 0
physical id     : 0
core id         : 0
processor       : 1
physical id     : 0
core id         : 1
processor       : 2
physical id     : 1
core id         : 0
processor       : 3
physical id     : 1
core id         : 1

这是我的双CPU双核系统。我有“处理器”0-3,每个处理器都位于处理器 0 或 1 上,作为核心 0 或 1。

你明白了。

综上所述,我怀疑您有一个双 CPU 四核系统,处理器为 0 到 7。

答案2

处理器数量:请注意,编号从 0 开始,因此如果我有处理器 1,我至少有 2 个

绑定到线程线程不会绑定到 CPU(除非您通过使用 cpulimit 和 co. 来实现技巧 - 在大多数情况下您不应该这样做)。假设您已将内核配置为 1000Hz 并且没有 I/O,则上下文切换每秒完成 1000 次。现在,在我的 2 个处理器设置中,此时大约有 300 个线程正在运行,这意味着每个进程将分配 6.(6) 个插槽。可以安全地假设在任何时刻每个进程都会占用两个核心。

鉴于 - 楼梯算法,I/O 使其不一定为真,但一秒钟的每个线程可能位于两个内核上 - 以及在等待时不运行(因此它不受任何内核的限制)。

超线程我猜你有 4 核 Intel iX 和超线程(除非你有双处理器机器)。超线程通过模拟单独的核心来工作。因此,如果进程正在等待一个内核的 I/O,它可以切换到执行另一个内核 - 这当然会让事情变得更加复杂。

相关内容