执行线程的核心数
Posted
技术标签:
【中文标题】执行线程的核心数【英文标题】:Core number of executed thread 【发布时间】:2013-05-30 22:48:41 【问题描述】:在并行 Java 代码中,我们可以了解线程在哪个内核上执行吗?
假设我有 10 个线程和 4 个内核,是否可以在代码中了解线程 1、线程 2、线程 3 等使用哪个内核?
这不是关键问题,但我想知道是否可能。
【问题讨论】:
不太可能...Java没有这样的低级访问权限,反正最终会告诉你的是操作系统,甚至不确定是否提到了你的CPU的物理布局! 你可以从这个问答中推断出你的答案:***.com/q/1896065/1065197 你想做什么?为什么需要这些信息? 就像@Gray 推断的那样,你为什么需要这样的信息?即使你能得到它,当任何此类查询返回/发出信号时,它也会变得陈旧。 我知道,我只是在并行代码上执行时间测量,在一个执行实例中,其中一个线程在其余线程完成后将近 10 秒完成。当时我没有监控 CPU,因此我想知道是否可以从代码中了解哪个内核正在执行该特定线程。总之,谢谢大家! 【参考方案1】:在并行 Java 代码中,我们可以了解线程在哪个内核上执行吗?
在 Java 内部,答案是否定的。有一些方法可以查看 Linux(可能还有其他 Unixen)中的进程列表,可以显示虚拟进程和 CPU 亲和性。这是非常不可移植的,但是对于上下文切换的任务,它没有意义。
我在这里有更多关于 CPU 信息的详细信息,但它没有解决相关性问题:Concurrency of posix threads in multiprocessor machine
【讨论】:
以上是关于执行线程的核心数的主要内容,如果未能解决你的问题,请参考以下文章
Java面试小短文当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?
Java面试小短文当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?
Java面试小短文当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?
Java 并发编程线程池机制 ( 线程池执行任务细节分析 | 线程池执行 execute 源码分析 | 先创建核心线程 | 再放入阻塞队列 | 最后创建非核心线程 )