Запуск параллельных сетевых задач с использованием xargs при минимизации накладных расходов на переключение контекста

Я хочу запустить 100 сетевых (не интенсивно работающих с процессором) заданий параллельно и хочу понять лучший подход.

В частности, возможно ли выполнить более 100 заданий с использованием xargs и каковы недостатки?

Я понимаю, что есть момент, когда происходит больше переключения контекста, чем фактической обработки пакетов. Как понять, где эта точка и как ее минимизировать?

Например, есть ли лучшие инструменты для использования, кроме xargs и т. Д.?

1 ответ

Лучше часто будет делом вкуса.

Используя GNU Parallel, вы можете сделать что-то вроде этого, чтобы получить 100 изображений параллельно:

seq 1000 | parallel -j100 wget https://foo.bar/image{}.jpg

Если вам нужны данные с 100 серверов, и вы каждый раз получаете полную строку:

parallel -a servers.txt -j0 --line-buffer my_connect {}

Или же:

parallel -a servers.txt -j0 --line-buffer --tag my_connect {}

GNU Parallel - это общий параллелизатор, который позволяет легко запускать задания параллельно на одной и той же машине или на нескольких машинах, к которым у вас есть доступ по ssh.

Если у вас есть 32 различных задания, которые вы хотите запустить на 4 процессорах, прямой способ распараллеливания - запустить 8 заданий на каждом процессоре:

Простое планирование

GNU Parallel вместо этого порождает новый процесс после его завершения - поддерживая активные процессоры и, таким образом, экономя время:

Параллельное планирование GNU

Монтаж

По соображениям безопасности вы должны установить GNU Parallel вместе с менеджером пакетов, но если GNU Parallel не упакован для вашего дистрибутива, вы можете выполнить личную установку, которая не требует root-доступа. Это можно сделать за 10 секунд, выполнив это:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Для других вариантов установки см. http://git.savannah.gnu.org/cgit/parallel.git/tree/README

Учить больше

Смотрите больше примеров: http://www.gnu.org/software/parallel/man.html

Посмотрите вступительные видеоролики: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Просмотрите учебник: http://www.gnu.org/software/parallel/parallel_tutorial.html

Подпишитесь на список рассылки, чтобы получить поддержку: https://lists.gnu.org/mailman/listinfo/parallel

Другие вопросы по тегам