【发布时间】:2011-10-04 21:53:31
【问题描述】:
我想做什么
我有一个计算密集型 OCaml 应用程序,我希望它在后台运行,而不会影响正常的计算机使用。我想为用户提供两种选择:
(1) 应用程序仅在 CPU 使用率几乎为 0% 时运行;
(2) 应用程序仅使用“空闲”处理能力(例如,如果其他进程加起来达到 100%,则 OCaml 应用程序暂停;如果其他进程几乎为 0%,则 OCaml 应用程序没有限制;如果其他进程加起来是 50%,然后 OCaml 将使用高达 50%)。
一些想法
我的想法是在代码中的各个检查点检查 CPU 使用率,并在必要时暂停执行。
在 (1) 中,我们只检查 CPU 是否低于 2%,如果没有,则暂停直到再次低于 2%。
在 (2) 中,事情变得更加棘手。由于在没有限制的情况下,应用程序总是消耗 100% 的 CPU 并且检查点会非常频繁,为了将 CPU 使用率减少到一半,我只需在每个检查点将其延迟到检查点之间所用的时间。如果检查点很频繁,我会说这类似于使用 50% 的 CPU。对于其他百分比,我们可以通过暂停适当的时间段来做类似的事情。然而,这看起来非常做作,充满了开销,最重要的是,我不确定它是否真的能达到我想要的效果。更好的选择可能是在应用程序开始时使用一些适当的整数调用Unix.nice n。我想设置n=15 可能是正确的。
我的问题
(Q1) 我如何从我的 OCaml 应用程序中知道应用程序进程的 CPU 使用率是多少? (我想用 OCaml 函数而不是通过在命令行上调用“ps”或类似的东西来做到这一点......)
(Q2) 你认为我实现 (2) 的想法有问题吗?改变流程的好坏有哪些实际区别?
(Q3)您对(2)还有什么建议吗?
【问题讨论】:
标签: ocaml cpu-usage background-process