细节很简单,您说“必须不断生成值”,如果这是极端的话,那么CPU饱和实际上就是目标。
但是,如果您将“连续”定义为每秒 X 值,那么还有工作空间。
因为那时您可以在 100% CPU 上运行您的进程,随时间测量值的数量,如果您发现它生成的值比必要的多(超过 X/秒),那么您现在可以将暂停插入到进程中直到价值率达到您想要的目标为止。
该计划是持续监控和调整暂停,以随着时间的推移保持您的价值率。然后,您的进程将占用尽可能多的 CPU 来满足您的 values/sec 目标。
附加物:
如果您有一个满意的值/秒基准,那么插入睡眠将为其他应用程序提供“所有必要的优先级”,但仍保持您的吞吐量。另一方面,如果您没有任何可靠的要求,即要求“在没有其他任何运行时尽可能快地运行,如果其他进程控制 CPU,则对任何结果没有实际要求”,那么这确实是主机操作系统的内核问题,而不是 JVM 有任何直接的、可移植的机制来解决的问题。
在 Unix 系统上,你有 nice(1) 命令来调整进程(而不是线程)优先级,而 Windows 有自己的机制。使用这些命令,您可以将 Java 进程的优先级提高到略高于“空闲”(默认“进程”总是在没有其他东西运行时运行)。但它是特定于平台的,因为这是一个固有的特定于平台的问题。这可以通过启动 Java 程序的平台特定启动脚本(或者甚至是检测平台并在执行实际代码之前“做正确的事情”的 Java 启动器)来管理。
大多数系统将允许您降低自己的进程优先级,但除非您是管理员/超级用户或具有适合您的主机操作系统的任何角色,否则很少有人会让您提高。