Вы на самом деле измеряли, сколько времени занимают вилки? Цитирование страницы , на которую вы ссылались ,
У Linux никогда не было этой проблемы; Поскольку Linux использовал внутреннюю семантику копирования при записи, Linux копирует страницы только тогда, когда они изменились (на самом деле, есть еще несколько таблиц, которые необходимо скопировать; в большинстве случаев их издержки незначительны)
Таким образом, число вилок на самом деле не показывает, насколько большими будут накладные расходы. Вы должны измерить время , потребляемое вилками, и (что является общим советом), потребляемое только теми вилками, которые вы фактически выполняете, а не путем сравнения максимальной производительности.
Но если вы действительно поймете, что разветвление большого процесса является медленным, вы можете запустить небольшой вспомогательный процесс, направить основной процесс на его вход и получить от него команды на exec
. Небольшой процесс будет fork
и exec
этими командами.
posix_spawn ()
Эта функция, насколько я понимаю, реализована через fork
/ exec
в настольных системах. Однако во встроенных системах (особенно в тех, у которых нет MMU на плате), процессы запускаются через системный вызов, интерфейс для которого - posix_spawn
или аналогичная функция. Цитирую информативный раздел стандарта POSIX с описанием posix_spawn
:
Обычно обмен выполняется слишком медленно для среды реального времени.
Динамическая трансляция адресов недоступна везде, где может быть полезен POSIX.
Процессы слишком полезны, чтобы просто отключать POSIX всякий раз, когда он должен работать без трансляции адресов или других служб MMU.
Таким образом, POSIX нужны примитивы для создания процессов и выполнения файлов, которые могут быть эффективно реализованы без трансляции адресов или других служб MMU.
Я не думаю, что вы получите выгоду от этой функции на рабочем столе, если ваша цель - минимизировать затраты времени.