Linux (и, действительно, Unix) дает вам третий вариант.
Вариант 1 - процессы
Создайте автономный исполняемый файл, который обрабатывает некоторую часть (или все части) вашего приложения, и вызывайте его отдельно для каждого процесса, например, программа запускает свои копии для делегирования задач.
Вариант 2 - темы
Создание автономного исполняемого файла, который запускается с одного потока, и создания дополнительных потоков для выполнения некоторых задач
Вариант 3 - вилка
Доступно только в Linux / Unix, это немного отличается. Разветвленный процесс на самом деле является собственным процессом с собственным адресным пространством - дочерний элемент не может (обычно) ничего сделать, чтобы повлиять на адресное пространство своего родителя или братьев и сестер (в отличие от потока), поэтому вы получаете дополнительную надежность.
Однако страницы памяти не копируются, они копируются при записи, поэтому обычно используется меньше памяти, чем вы можете себе представить.
Рассмотрим программу веб-сервера, которая состоит из двух шагов:
- Чтение данных конфигурации и времени выполнения
- Запросы на обслуживание страниц
Если вы использовали потоки, шаг 1 будет выполнен один раз, а шаг 2 - в нескольких потоках. Если вы использовали «традиционные» процессы, шаги 1 и 2 должны были бы повторяться для каждого процесса, а память для хранения данных конфигурации и времени выполнения дублировалась. Если вы использовали fork (), то вы можете выполнить шаг 1 один раз, а затем fork (), оставив данные и конфигурацию времени выполнения в памяти без изменений, не скопировав.
Так что на самом деле есть три варианта.