Потоки против процессов в целом

#multithreading #process #threadpool

#многопоточность #процесс #threadpool

Вопрос:

1) Почему создание потока дешевле, чем создание процесса?

2) В чем разница между потоком и подпроцессом? Как это связано с вышеупомянутым вопросом?

Ответ №1:

Когда процесс создается, ему выделяется куча и стековая память. Потоки, с другой стороны, получают только стек и совместно используют кучу с родительским процессом. Это означает, что даже если вы просто учитываете выделение памяти, создавать процесс «дороже», чем поток.

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

Комментарии:

1. но разве дочерний процесс не использует память своих родителей?

2. Хорошо, значит, единственная основная стоимость — это выделение памяти?

3. @user559142: Термин «подпроцесс» немного вводит в заблуждение. Это просто процесс со своим собственным стеком и памятью кучи и, возможно, потоками. Подпроцесс — это процесс, точка. Что касается «основных затрат»: распределение памяти — это самая большая разница, но есть и другие, зависящие от конкретной операционной системы различия.

4. @Paul исполняемый код процесса обычно копируется в подпоток? Разве это тоже не общий доступ, когда процесс обычно создает новую копию исполняемого кода?

5. @San Jacinto: Не совсем. Поток получает свой собственный стек выполнения. Он может использовать / совместно использовать код своих процессов во время выполнения, но ничего не копируется заранее.

Ответ №2:

Ответ на этот вопрос, вероятно, сильно зависит от операционной системы, но является общим правилом :

  1. Потоки процесса находятся в том же пространстве виртуальной памяти, что и их родительский элемент. Таким образом, создание потока обходится дешевле, чем создание процесса, потому что базовой операционной системе не нужно создавать полное пространство виртуальной памяти.

  2. Подпроцесс — это просто еще один процесс, порожденный родительским.

Комментарии:

1. Если дочерний процесс является дубликатом родительского процесса, не использует ли он одно и то же пространство виртуальной памяти?

2. Подпроцесс — это просто еще один процесс, который живет в своем собственном пространстве. 🙂