C++程序如何利用所有内核

How to utilise all cores for C++ program

我运行将一个 Java 程序转换为 C++,与 Java 相比,我从 C++ 获得的性能非常慢。查看 activity 监视器,我看到我首先 运行 的 Java 程序使用了超过 90% 的 CPU,而 C++ 程序使用了大约30%.

看来 JVM 能够在没有用户干预的情况下利用 CPU 的全部功能。我应该做哪些更改才能更好地使用 C++ 案例的 CPU?

好好读一读C++ programming book then see this C++ reference. Read also the documentation of your C++ compiler (perhaps GCC).

还阅读一些 operating system textbook

考虑使用 POCO or Qt or Wt.

等框架

对于多核处理器,您可能会使用 C++ threads. You'll need to synchronize them, e.g. using mutex and condition variables

在 GNU Linux 上,您可以阅读 advanced linux programming and use the syscalls(2) related to process creation and management (e..g. fork(2), execve(2), waitpid(2)...) and profiling (see time(7), profil(3), gprof(1), perf(1))。

在 Windows 上,您需要使用 WinAPI

I translated a Java program into C++

总的来说,这是个坏主意。学习您的编程语言和操作系统,并为其设计软件。

现有的 开源软件中汲取灵感 github or gitlab (e.g. RefPerSys, Firefox, Tensorflow, OpenJDK, Clang static analyzer, Fish ...)

Java 实现(例如 JVMs) have some garbage collection and some class loader.

C++ 实现没有任何垃圾回收。所以阅读 GC handbook. Notice that circular references 很难在 C++ 中有效处理,这可以解释你的性能问题。

在 Linux/x86-64 上,您可能会加载 plugins with dlopen(3) with dlsym(3) (or generate machine code at runtime using asmjit or libgccjit)