我有时用Java编写代码,我注意到有时它在多核计算机上使用超过100%的CPU。我现在在具有33个CPU(亚马逊的EC2)的多核机器上运行一些代码,我想让我的Java进程使用所有可用的CPU,这样它将具有非常高的机器利用率。这是可能的,还是由Java来决定何时使用超过100%的CPU?我不想更改代码以使用多线程。
答案 0 :(得分:6)
如果不使用多个线程或进程(或运行一个进程以外的其他进程),您将无法在 n 核心计算机上实现n * 100%的使用。
操作系统决定在单个线程上运行每个用户程序,除非发出更多请求。如果没有这个请求,操作系统很乐意让你在一个线程中运行你的代码,可能会占用整个CPU的周期 - 但它会让其他人保持开放状态。
答案 1 :(得分:2)
如果您的程序没有明确多线程(您自己不启动任何线程),那么它可以使用多个核心的唯一原因是因为您正在使用库的某些功能,最终将工作委派给a线程池。显然你没有太多的控制权,所以你不能让它更有效。
关于利用S3实例中的所有CPU:您可以多次启动程序(例如,如果您有33个CPU,则启动33次)。如果这是不可能的,你将不得不找出你的处理的哪个部分在线程池上创建工作并更改你的程序,以便它更多地(并行)。