【问题标题】:Running processes on different cores在不同的内核上运行进程
【发布时间】: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


【解决方案1】:

您无法明确指定在哪个内核上执行您的线程,但是您可以为线程分配优先级和关联性。

this 的可能重复项。

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 2011-11-24
    • 2010-12-20
    • 2013-08-09
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    相关资源
    最近更新 更多