Вилка и нитки в рубине - PullRequest
8 голосов
/ 02 марта 2011

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

Ответы [ 2 ]

8 голосов
/ 02 марта 2011

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

В системе с более чем одним процессором (или ядрами процессора) вы можете обычно (при условии, что у вас есть система с поддержкой SMP, привязка к процессору не мешает этому) ожидать, что эти два процесса будут использовать оба процессора, но у вас нет строгой гарантии.

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

В качестве примечания, недостаток использования fork () и запуска 2 процессоввместо потоков то, что процессы не разделяют общее адресное пространство, что означает, что TLB должен быть сброшен при переключении контекста.

0 голосов
/ 02 марта 2011

Это зависит от операционной системы, языка программирования, компилятора и библиотеки времени выполнения, поэтому я могу привести только один пример: если вы используете _beginthread под Windows (независимо от того, используете ли вы MinGW или MSCRT напрямую), вы используете оба ваши процессоры. Далее, чтобы объяснить семантику «параллельный» или «параллельный»: они неисключительны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...