Почему создавать потоки быстрее, чем создавать процессы? - PullRequest
2 голосов
/ 14 февраля 2011

Это просто потому, что им нужны только стек и хранилище для регистров, чтобы их было дешево создавать?

Является ли тот факт, что потоки могут совместно использовать общие данные, т. Е. Им не нужно использовать межпроцессное взаимодействие, является здесь фактором? Приведет ли это к снижению потребности в защите?

Или потоки используют преимущества мультипроцессоров лучше, чем процессы?

Ответы [ 4 ]

4 голосов
/ 14 февраля 2011

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

Я подозреваю, что вы бы узнали больше, обратившись к этому вопросу Переполнение стека .

1 голос
/ 14 февраля 2011

Если мы говорим о тяжеловесных потоках (например, потоках Windows), у Процесса есть Потоки, и у него есть хотя бы один поток (основной поток), так что он явно тяжелее или, по крайней мере, не легчесумма всегда> = часть)

Существует много «таблиц», которые должен иметь Процесс (таблица открытых файлов, таблица, показывающая, как отображается память (LDT, Local Descriptor Table) ...).Если вы создаете процесс, все эти таблицы должны быть инициализированы.Если вы создаете поток, он этого не делает (потому что поток использует потоки своего процесса).И тогда новый процесс должен снова загрузить все библиотеки DLL, проверить их на переназначение ...

1 голос
/ 14 февраля 2011

С точки зрения Windows процесс может занять больше времени для создания, если он загружает много библиотек DLL, а также перемещает их в памяти из-за конфликтов в базовом адресе.Затем просмотрите все другие причины, перечисленные в ссылке из ответа Дэвида Хеффернана.

0 голосов
/ 12 октября 2015

Переключение процессов требует изменения в регистрах CS / DS. Изменение значений этих регистров требует выборки нового дескриптора из глобальной таблицы дескрипторов, что на самом деле является дорогостоящим процессом с точки зрения процессорного времени.

...