Как (тривиально) выполнить параллелизацию с оболочкой Linux, запустив одну задачу на каждое ядро ​​Linux?

Современные процессоры обычно состоят из нескольких физических ядер. Они могут даже быть многопоточными, так что ядро ​​Linux видит довольно большое количество ядер и, соответственно, несколько раз запускает планировщик Linux (по одному для каждого ядра). При выполнении нескольких задач в системе Linux планировщик обычно обеспечивает хорошее распределение общей рабочей нагрузки на все ядра Linux (может быть одно и то же физическое ядро).

Теперь, скажем, мне нужно обработать большое количество файлов с помощью одного и того же исполняемого файла. Обычно я делаю это с помощью команды «find»:

find <path> <option> <exec>

Однако, это запускает только одну задачу в любой момент и ждет ее завершения перед запуском следующей задачи. Таким образом, в любой момент для этого используется только одно ядро. Это оставляет большинство ядер бездействующими (если эта команда поиска - единственная задача, выполняемая в системе). Было бы намного лучше запускать N задач одновременно. Где N - количество ядер, видимых ядром Linux.

Есть ли команда, которая сделает это?

6
задан ritter 24 January 2012 в 19:50
поделиться