Ocaml:获取进程的CPU使用率

Sur*_*tor 5 ocaml cpu-usage background-process

我想做的事

我有一个计算密集的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)有任何其他建议吗?