Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置Java线程';cpu核心亲和力?_Java_Linux - Fatal编程技术网

如何设置Java线程';cpu核心亲和力?

如何设置Java线程';cpu核心亲和力?,java,linux,Java,Linux,我搜索了以前关于类似主题的帖子,但找不到合适的答案,因此提出了这个问题。非常感谢您的帮助 我知道在Linux中通过taskset命令设置进程与特定CPU核心的关联性。但是我想设置一个Java线程与特定cpu核心的关联性,以便属于同一进程的其他线程可以在所有剩余的核心上运行。例如,如果我有一个进程包含10个线程和4核机器,我想为一个线程保留core-1,并让剩余的9个线程在剩余的3核机器上运行。这能做到吗?如何做到 谢谢 Sachin不幸的是,您无法将Java线程分配给特定的核心。但是,您可以做的

我搜索了以前关于类似主题的帖子,但找不到合适的答案,因此提出了这个问题。非常感谢您的帮助

我知道在Linux中通过taskset命令设置进程与特定CPU核心的关联性。但是我想设置一个Java线程与特定cpu核心的关联性,以便属于同一进程的其他线程可以在所有剩余的核心上运行。例如,如果我有一个进程包含10个线程和4核机器,我想为一个线程保留core-1,并让剩余的9个线程在剩余的3核机器上运行。这能做到吗?如何做到

谢谢
Sachin

不幸的是,您无法将Java线程分配给特定的核心。但是,您可以做的是设置线程的优先级(假设这将完成相同的任务)


或者,您可以使用JNI,但这完全是多余的

请记住,您运行的Java应用程序实际上是在JVM中运行的,而JVM又运行在操作系统上。为了能够直接与CPU交互,您需要一种低级编程语言(例如C)


正如在另一个答案中所建议的那样,您可以使用JNI与低级语言(如C)交互以完成您想要的任务,但是您必须将并发性(在该低级语言中管理的线程)委托给它…

假设2241是java进程的pid。运行:

jstack 2241
这将为您提供一个线程列表。在那里找到您的,并注意nid字段。假设nid=0x8e9,它将以10为基数转换为2281。然后运行:

taskset -p -c 0 2281

完成。

您可以使用JNA在纯Java中完成。不需要使用任务集。请记住,线程关联是没有意义的,除非您之前已将内核与内核/用户线程和硬件中断隔离开来。我隶属于Coral Blocks公司,该公司开发的Coral Blocks正是这样做的。

是的,否则java不会独立于硬件吗