gpt4 book ai didi

Ocaml:获取进程的 CPU 使用率

转载 作者:行者123 更新时间:2023-12-04 17:56:55 26 4
gpt4 key购买 nike

我想做的事

我有一个计算密集型 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)还有什么建议吗?

最佳答案

获取您的 PID,然后解析 /proc/<PID>/stat 的内容获取有关您的流程和 /proc/stat 的信息获取全局 CPU 信息。他们都有一堆统计数据,你可以用它们来决定什么时候工作,什么时候 sleep 。做 man proc查看所有字段的文档(长)。相关问题的好信息:stackoverflow.com/questions/1420426

设置 niceness 既简单又可靠。自己做事需要更多的工作,但可能会给你更多的控制权。如果您的实际目标只是作为后台任务运行,我会很高兴并完成它。

关于Ocaml:获取进程的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6686432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com