Dzisiejsze procesory zazwyczaj zawierają kilka rdzeni fizycznych. Mogą one być nawet wielowątkowe, tak że jądro Linux widzi dość dużą liczbę rdzeni i odpowiednio zaczyna się kilka razy od harmonogramu Linuksa (po jednym dla każdego rdzenia). Podczas wykonywania wielu zadań w systemie Linux program planujący osiąga normalnie dobrą dystrybucję całkowitego obciążenia pracą dla wszystkich rdzeni systemu Linux (może to być ten sam rdzeń fizyczny).Jak (banalnie) zrównoleglić się z powłoką Linuksa, uruchamiając jedno zadanie na rdzeń systemu Linux?
Teraz, powiedzmy, mam dużą liczbę plików do przetworzenia z tym samym plikiem wykonywalnym. I zazwyczaj to zrobić za pomocą polecenia „znaleźć”:
find <path> <option> <exec>
to jednak tylko jedno zadanie rozpoczyna się w każdej chwili i czeka aż jego zakończeniu przed rozpoczęciem następnego zadania. W związku z tym, tylko jeden rdzeń w dowolnym momencie jest w użyciu do tego. Dzięki temu większość rdzeni pozostaje bezczynna (jeśli to polecenie-find jest jedynym zadaniem uruchomionym w systemie). Byłoby znacznie lepiej uruchomić N zadań w tym samym czasie. Gdzie N jest liczbą rdzeni widzianych przez jądro Linuksa.
Czy istnieje polecenie, które to zrobi?
Zobacz równoległe narzędzie GNU. Nie wiem, jak to pasuje do konkretnego problemu, ale przeczytaj: http://www.gnu.org/software/parallel/ –
Tak, masz rację. GNU równoległy jest rzeczywiście przeznaczony do tego użytku. Może być używany jako zamiennik dla "xargs". – ritter
@Daniel: Wygląda na to, że powinieneś opublikować to jako odpowiedź. –