Как запустить ограниченное количество экземпляров программы?

237
korasov

Например, у меня есть около 14000 файлов, которые мне нужно обработать. Сейчас я делаю это с

for %%a in (*.OGG) do revorb.exe "%%a" 

Это запускает все revorbs один за другим. У меня есть четырехъядерный процессор, поэтому я хотел бы запустить четыре экземпляра revorb одновременно, но не более четырех. я пробовал

for %%a in (*.OGG) do start revorb.exe "%%a" 

и это вызвало BSOD. Есть ли другой способ запустить четыре задачи параллельно?

0

1 ответ на вопрос

2
agtoever

Насколько я знаю, это не может быть сделано из командной строки или пакетной программы в Windows. Это потому, что вы не можете контролировать из командной строки, какое ядро ​​назначено для определенной работы. Вы можете сделать это только после того, как приложение уже запущено . «Правильный» способ использования разных ядер - это приложение или программа, которая (интенсивно использует процессор) работает. Приложения используют многопоточность для одновременного использования различных ядер. Поскольку многопоточность делает код более сложным, не все приложения реализуют многопоточность.

Для кодирования аудио / видео многопоточность действительно окупается. В вашем сценарии «правильный» способ ускорения состоит в использовании всех ядер для каждого файла с использованием многопоточности вместо использования нескольких потоков / ядер для экземпляров программы, кодирующих разные файлы .

Правильное решение - использовать кодировщик, который использует все ядра для каждого файла, который он кодирует . Например, Libav или Handbrake бы подходящие инструменты для этого.

И просто вручную запустите желаемое количество экземпляров и используйте какую-то логику именования файлов, чтобы контролировать, какие файлы обрабатываются каждым экземпляром без дублирования? fixer1234 8 лет назад 0
Нет способа узнать, как ОС (Windows) назначает экземпляры ядрам. Windows не всегда назначает каждый экземпляр другому ядру. Вы можете запустить больше процессов, чем ядер, надеясь, что Windows в конечном итоге распределит их более или менее равномерно по ядрам, но это приводит к большим накладным расходам на переключение задач. Итак, в конце концов: если ваше приложение будет использовать все ядра, при обработке каждого файла один за другим наиболее оптимально будет использовать все ядра. agtoever 8 лет назад 1

Похожие вопросы