【发布时间】:2014-12-15 04:33:23
【问题描述】:
我有一些 java 类(黑盒),我通过 jni 从本机 C 代码调用它们。我的本机代码中有 4 个并行线程需要始终运行,它们偶尔会调用一些 java 类,但这些类运行速度非常慢。我认为线程在单个内核上运行并使用多个内核可以解决我的问题(崩溃)。我想在后台运行java环境,一个核心上的4个本机代码线程,如果调用java lasses应该在独立于本机代码操作的单独核心上运行。请告诉我我是否走在正确的轨道上,并让我知道我可以继续的可能方式。提前致谢。
【问题讨论】:
-
你为什么认为线程都在一个内核上运行?操作系统会自动将线程分配给可用于运行它们的处理器内核。除非您的其他内核都忙于运行 other CPU 密集型程序,否则您的线程应该自动在多个内核上并发运行,而无需您做任何特别的努力。
-
另外,您提到崩溃是您希望通过在多核上运行来解决的问题。如果程序崩溃取决于它使用的内核数量,那是程序本身的错误。给它更多的内核不是解决方案,也不能保证它不会崩溃(即使它减少了它的发生频率)。程序本身需要修复。
-
这两个组件单独运行良好,后来集成同时运行,这就是它们运行到一定程度然后崩溃的点。你认为并行运行 2 个进程是否可行,也许通过使用 MPI?
-
如果您的任务在不同的线程中运行,它们可能已经在不同的内核上并行运行;目前还不清楚为什么你认为他们不是。但是,如果它们还没有在不同的内核上运行,那么让它们这样做不太可能阻止崩溃。由于竞争条件和共享数据的锁定不足,并行运行往往会产生问题。 (这可能是为什么您的程序会因线程中运行的任务而崩溃。)
标签: java c java-native-interface multiprocessing multicore