gpt4 book ai didi

JNI C++ 环境中的 Java 线程仅使用一个内核。 Arm 处理器和 Ubuntu

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:24 29 4
gpt4 key购买 nike

我制作了多线程 java 程序来处理来自文件的数据。这是经过充分测试的,并将工作负载分配到可用的 CPU 内核上。

现在我用 C++ 做了一个本地阅读器。该程序使用 JNI 从 Java 内部启动,并在数据准备就绪时调用 java 程序。

除了在激活 native 阅读器时整个 java 程序仅使用一个内核之外,该机制运行良好。

我怀疑 C++ 阅读器未正确编译,或者 JNI 共享内存可能存在一些问题。

我已经为 C++ 程序尝试了几个编译器和链接器选项:-pthread -lpthread -std=c++11

平台是:带有 Arm 处理器的 Jetson TK1。 Java甲骨文1.8。操作系统 Ubuntu。

感谢您的任何答复。

最佳答案

解决了!

问题是在需要时从其他处理线程生成新线程。 (线程延迟启动)当所有线程都基于 Java 时,这在从文件中读取时非常有用。

在这种情况下,新的 Java 线程是从 C++ 通过 JNI 产生的线程生成的。我不知道为什么,但在这种情况下,新线程最终会在同一个内核上运行。

解决方案是在将处理单元添加到 java 框架时启​​动线程。现在所有的 CPU 核心都被利用了!

再次感谢Jojje!我想您的评论让您明白了!

关于JNI C++ 环境中的 Java 线程仅使用一个内核。 Arm 处理器和 Ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35871484/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com