Выполнение внешней программы на Java - огромная загрузка процессора

1

У меня этот код в моей программе:

        ProcessBuilder builder = new ProcessBuilder(command);

        builder.directory(new File(Vars.pathToForFfmpegBinDir));

        final Process process = builder.start();

        InputStream is = process.getErrorStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println("!!! "+line);
        }

Поскольку внешняя программа получить много информации на выходе, он загружается 100% одного ядра процессора в while цикл.

Я попробовал другую версию этого кода:

        ProcessBuilder builder = new ProcessBuilder(command);
        builder.redirectError(new File(pathToForModerationDir+"/1err.log"));
        builder.redirectOutput(new File(pathToForModerationDir+"/1inp.log"));
        builder.directory(new File(Vars.pathToForFfmpegBinDir));

        final Process process = builder.start();
        process.waitFor();

Но он загружается на 100% одного ядра процессора на каждый процесс.

Как я могу уменьшить загрузку процессора в этом коде?

  • 1
    Если вы выполняете внешнюю команду из терминала, у вас нет проблемы загрузки процессора?
  • 0
    Часть в вашей программе, которая гласит: «Обработка изображений» не сулит ничего хорошего для вашей проблемы загрузки процессора
Показать ещё 4 комментария
Теги:

1 ответ

0

Когда я запускаю это, я попытался найти его top но он использует менее 0,1% процессора и не появляется в моих топ-20 процессах для моего идентификатора пользователя.

ProcessBuilder builder = new ProcessBuilder("sh", "-c", "while true; do sleep 1; date; done");
builder.redirectErrorStream(true);
final Process process = builder.start();

try (BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
    for (String line; (line = br.readLine()) != null; )
        System.out.println("!!! " + line);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню