【问题标题】:Core number of executed thread执行线程的核心数
【发布时间】:2013-05-30 22:48:41
【问题描述】:

在并行 Java 代码中,我们可以了解线程在哪个内核上执行吗?

假设我有 10 个线程和 4 个内核,是否可以在代码中了解线程 1、线程 2、线程 3 等使用哪个内核?

这不是关键问题,但我想知道是否可能。

【问题讨论】:

  • 不太可能...Java没有这样的低级访问权限,反正最终会告诉你的是操作系统,甚至不确定是否提到了你的CPU的物理布局!
  • 你可以从这个问答中推断出你的答案:stackoverflow.com/q/1896065/1065197
  • 你想做什么?为什么需要这些信息?
  • 就像@Gray 推断的那样,你为什么需要这样的信息?即使你能得到它,当任何此类查询返回/发出信号时,它也会变得陈旧。
  • 我知道,我只是在并行代码上执行时间测量,在一个执行实例中,其中一个线程在其余线程完成后将近 10 秒完成。当时我没有监控 CPU,因此我想知道是否可以从代码中了解哪个内核正在执行该特定线程。总之,谢谢大家!

标签: java multithreading parallel-processing multicore


【解决方案1】:

在并行 Java 代码中,我们可以了解线程在哪个内核上执行吗?

在 Java 内部,答案是否定的。有一些方法可以查看 Linux(可能还有其他 Unixen)中的进程列表,可以显示虚拟进程和 CPU 亲和性。这是非常不可移植的,但是对于上下文切换的任务,它没有意义。

我在这里有更多关于 CPU 信息的详细信息,但它没有解决相关性问题:Concurrency of posix threads in multiprocessor machine

【讨论】:

    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2020-04-13
    • 2014-08-28
    • 2011-06-23
    • 2013-01-17
    • 2013-03-02
    相关资源
    最近更新 更多