У вас один вопрос, или сотня?
При запуске программы вызывается системный вызов типа fork. При этом система дублирует адресное пространство процесса и подменяет его новым кодом, грузит библиотеки, инициализирует стек, память поцесса, открывает пути ввода/вывода. Как видите, накладных расходов куча и маленькая тележка. Операционные системы как могут, оптимизируют это дело, до какого-то предела. Поэтому все стараются избегать запуска процессов очень часто.
Что же нам теперь делать? Запустить несколько одинаковых процессов (воркеры) которые будут слушать очередь команд и выполнять нужные нам действия, а мы будем регулировать загрузку системы добавляя или убирая количество воркеров.
Так на чем же принято делать эти очереди? Можно на IPC системы, сокетах, очереди, мьютксы и семафоры. А можно на специальном ПО типа rabbitmq, zeromq, или даже на redis с его pub-sub.
Кажется на какой-то вопрос я не ответил....
А да, что выбрать? IPC или готовую очередь? Я выбираю отлаженные библиотеки!
И да, есть еще треды, они на порядок легче процессов, а есть еще сопрограммы coroutines, они легче тредов, но у всего есть плюсы и минусы.