Las CPU actuales generalmente comprenden varios núcleos físicos. Estos incluso pueden ser de subprocesos múltiples para que el kernel de Linux vea un número bastante grande de núcleos y en consecuencia inicie varias veces el programador de Linux (uno para cada núcleo). Cuando se ejecutan varias tareas en un sistema Linux, el programador normalmente logra una buena distribución de la carga de trabajo total para todos los núcleos de Linux (podría ser el mismo núcleo físico).¿Cómo paralelizar (trivialmente) con el shell de Linux iniciando una tarea por núcleo de Linux?
Ahora, digo, tengo una gran cantidad de archivos para procesar con el mismo ejecutable. Yo suelo hacer esto con el comando "buscar":
find <path> <option> <exec>
Sin embargo, esto comienza una sola tarea en cualquier momento y espera hasta su finalización antes de iniciar la siguiente tarea. Por lo tanto, solo se usa un núcleo en cualquier momento para esto. Esto deja la mayoría de los núcleos inactivos (si este comando de búsqueda es la única tarea que se ejecuta en el sistema). Sería mucho mejor lanzar N tareas al mismo tiempo. Donde N es la cantidad de núcleos vistos por el kernel de Linux.
¿Hay algún comando que haga eso?
Eche un vistazo a la utilidad paralela GNU. No sé cómo encaja en su problema particular, pero lea: http://www.gnu.org/software/parallel/ –
Sí, tiene razón. El paralelo GNU está diseñado para este uso. Se puede usar como reemplazo de "xargs". – ritter
@Daniel: parece que deberías publicar eso como respuesta. –