我有时用 Java 编写代码,我注意到有时它在多核机器上使用超过 100% 的 CPU。我现在在具有 33 个 CPU(Amazon 的 EC2)的多核机器上运行一些代码,并且我想让我的 Java 进程使用所有可用的 CPU,以便它对机器有很高的利用率。这可能吗,还是由 Java 决定何时使用超过 100% 的 CPU?我不希望更改代码以使用多线程。
问问题
9505 次
2 回答
6
如果不使用多个线程或进程(或运行的一个进程以外的其他东西),您将无法在n核机器上实现 n*100% 的使用率。
操作系统决定在单个线程上运行每个用户程序,除非请求更多。如果没有该请求,操作系统将很乐意让您在单个线程中运行您的代码,这可能会最大化整个 CPU 的周期 - 但它会让其他 CPU 保持打开状态。
于 2012-04-08T01:36:12.203 回答
2
如果您的程序不是显式多线程的(您自己不启动任何线程),那么它可以利用多个内核的唯一原因是因为您使用了库的某些功能,最终将工作委托给线程池。显然,您对此没有太多控制权,因此您无法使其更加必要地工作。
关于利用 S3 实例中的所有 CPU:您可以多次启动程序(例如,如果您有 33 个 CPU,则启动 33 次)。如果这不可能,您将必须找出处理的哪一部分在线程池上创建工作并更改您的程序,以便它执行更多操作(并行)。
于 2012-04-08T01:43:31.543 回答