Каково различие между ветвлением и потоком?

Кто-либо может объяснить различие между ветвлением и потоком?

87
задан nbro 15 March 2016 в 18:25
поделиться

2 ответа

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

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

85
ответ дан 24 November 2019 в 07:45
поделиться

Ответ Dacav превосходен, я просто хотел добавить, что не все модели потоковой обработки обеспечивают истинную многопроцессорность.

Например, реализация потоковой передачи по умолчанию в Ruby не использует настоящие потоки ОС / ядра. Вместо этого он имитирует наличие нескольких потоков, переключаясь между объектами Thread в одном потоке / процессе ядра.

Это важно для многопроцессорных / многоядерных систем, потому что эти типы облегченных потоков могут выполняться только на одном ядре - вы не получите особого повышения производительности за счет наличия нескольких потоков.

Другое место, где это имеет значение, - это когда один поток блокирует (ожидает ввода-вывода или вызывает IOCTL драйвера), все потоки блокируются.

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

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

Удачи и веселья! Многопоточность одновременно сложна и полезна.

29
ответ дан 24 November 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: