Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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程序?_Java_Multithreading_Jvm - Fatal编程技术网

如何在多个内核上执行java程序?

如何在多个内核上执行java程序?,java,multithreading,jvm,Java,Multithreading,Jvm,我有一个Java程序,我在bash脚本中基于循环(根据编译以构建linux内核的文件数量)运行了数千次 由于jvm已启动多次,因此出现了性能问题 然后我在java中实现了一个包装器,它与我的bash脚本一样,从文件中读取一行,然后调用我以前程序的main。。。这样,我只有一个jvm在运行 现在的问题是,我的盒子只使用了一个核心,这是另一个性能问题。。。我是否必须启动一些线程,或者我是否可以使用相同的方法,但可能以不同的方式调用“前一个”main? 如果我必须启动一些线程,我如何在多个内核中分派它

我有一个Java程序,我在bash脚本中基于循环(根据编译以构建linux内核的文件数量)运行了数千次

由于jvm已启动多次,因此出现了性能问题

然后我在java中实现了一个包装器,它与我的bash脚本一样,从文件中读取一行,然后调用我以前程序的main。。。这样,我只有一个jvm在运行

现在的问题是,我的盒子只使用了一个核心,这是另一个性能问题。。。我是否必须启动一些线程,或者我是否可以使用相同的方法,但可能以不同的方式调用“前一个”main? 如果我必须启动一些线程,我如何在多个内核中分派它们


谢谢…

您的java程序需要成为多线程的,以便利用许多内核


例如,使用java.util.concurrent.Executors创建线程池,将数据项封装为可运行的,并将可运行的提交给线程池。

您需要使程序成为多线程的。要做到这一点,您必须进行一些学习,我建议您从开始。

冒着过于简化的风险,让您的旧类实现Runnable,将main()中的内容放在Run()中,然后使用该类创建一个新线程并启动该线程


事实上,如果线程需要共享数据,可能会比这更复杂,但根据您所说的您在这里所做的,看起来它们不会。所以它实际上可能就这么简单。

为什么要使用java来编译内核?我认为gcc具有并行编译的能力。如果没有多个内核,那么从多个线程中获得性能好处的可能性很小,因为编译似乎比I/O更需要CPU。仅供参考-您不必担心将线程分派到多个核心。只要创建线程,操作系统就会管理它们在哪些内核上执行。如果你正在编译一些东西,为什么不直接使用GNU make呢?它内置了对并行化的支持。不,我不是在编译东西。。。起初,我有一个围绕gcc的包装器,可以在编译的程序上执行我的程序,但后来我意识到,对于每个文件,都会启动一个新的jvm实例(因此,基本上,您可以并发执行,但您受到每个文件启动jvm的限制…)我已经考虑过了…但我不知道它是否过于简单化…这可能是一个好的开始…只是看看它是否有效:-)您还应该按照skaffman所说的做,并使用执行器和线程池(如果您有Java 5或更高版本)。你也不想让1000个线程运行。我同意凯西-斯卡夫曼的答案应该是你想要的。