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