Работа функции fork () в целом заключается в создании нового независимого процесса, дублировании таблицы страниц и маркировке всех страниц, принадлежащих процессу, который вызвал fork (), в качестве копии при записи в этом процессе.Затем fork () возвращает оба процесса (возвращаемое значение позволяет соответствующему процессу узнать, какой это процесс).
В системе с более чем одним процессором (или ядрами процессора) вы можете обычно (при условии, что у вас есть система с поддержкой SMP, привязка к процессору не мешает этому) ожидать, что эти два процесса будут использовать оба процессора, но у вас нет строгой гарантии.
Потоки генерируются ваналогичным образом в некоторых системах (например, в Linux) за исключением того, что страницы, принадлежащие первому процессу, не помечаются как копируемые при записи, а впоследствии принадлежат обоим процессам (они используют одну и ту же таблицу страниц).В других системах потоки могут быть реализованы по-разному, например, в пользовательской среде, и в этом случае вы не выиграете от нескольких процессоров с потоками.
В качестве примечания, недостаток использования fork () и запуска 2 процессоввместо потоков то, что процессы не разделяют общее адресное пространство, что означает, что TLB должен быть сброшен при переключении контекста.