Ocaml: Получение использования процессора процессом

То, что я хочу сделать

У меня есть приложение OCaml с интенсивными вычислениями, и я бы хотел, чтобы оно работало в фоновом режиме, не мешая нормальному использованию компьютера. Я хотел бы представить пользователям два варианта:

(1) приложение запускается только тогда, когда загрузка ЦП практически равна 0%;

(2) приложение использует только «бесплатную» вычислительную мощность (например, если другие процессы сложить до 100%, приложение OCaml приостанавливается; если другие процессы фактически равны 0%, то для приложения OCaml нет ограничений; если другие процессы составляют, скажем, 50%, тогда OCaml будет использовать до 50%).

Некоторые мысли

Моя идея состоит в том, чтобы проверить использование ЦП на различных контрольных точках в коде и при необходимости приостановить выполнение.

В (1) мы просто проверяем, ниже ли ЦП, скажем, 2%, а если нет , сделайте паузу, пока оно снова не станет ниже 2%.

В (2) все обстоит сложнее. Поскольку при отсутствии ограничений приложение всегда потребляет 100% ресурсов ЦП, а контрольные точки будут довольно частыми, чтобы уменьшить использование ЦП, скажем, наполовину, мне просто нужно задерживать его на каждой контрольной точке точно на время, которое прошло между контрольными точками. Я бы сказал, что если контрольные точки встречаются часто, это будет похоже на использование 50% ЦП. Для других процентов мы можем сделать нечто подобное, приостановив действие на соответствующие периоды времени. Однако это выглядит очень надуманным, полным накладных расходов и, прежде всего, я не уверен, что он действительно делает то, что я хочу. Лучшей альтернативой может быть вызов Unix.nice n с некоторым подходящим целым числом в начале приложения. Я полагаю, что установка n = 15 , вероятно, будет правильной.

Мои вопросы

(Q1) Как я могу узнать из моего приложения OCaml, каково использование ЦП для процесса приложения? (Я бы хотел сделать это с помощью функции OCaml, а не путем вызова "ps" или чего-то подобного в командной строке ...)

(Q2) Вы видите проблемы с моей идеей достижения (2). В чем практические отличия от изменения удобства процесса?

(Q3) Есть ли у вас другие предложения для (2)?

5
задан Surikator 7 August 2011 в 19:47
поделиться