#multithreading #process #threadpool
#многопоточность #процесс #threadpool
Вопрос:
1) Почему создание потока дешевле, чем создание процесса?
2) В чем разница между потоком и подпроцессом? Как это связано с вышеупомянутым вопросом?
Ответ №1:
Когда процесс создается, ему выделяется куча и стековая память. Потоки, с другой стороны, получают только стек и совместно используют кучу с родительским процессом. Это означает, что даже если вы просто учитываете выделение памяти, создавать процесс «дороже», чем поток.
Подпроцессы — это просто процессы, которые были созданы другим процессом. В остальном они независимы и получают свое собственное пространство памяти. Вот статья, в которой рассматриваются некоторые подробности.
Комментарии:
1. но разве дочерний процесс не использует память своих родителей?
2. Хорошо, значит, единственная основная стоимость — это выделение памяти?
3. @user559142: Термин «подпроцесс» немного вводит в заблуждение. Это просто процесс со своим собственным стеком и памятью кучи и, возможно, потоками. Подпроцесс — это процесс, точка. Что касается «основных затрат»: распределение памяти — это самая большая разница, но есть и другие, зависящие от конкретной операционной системы различия.
4. @Paul исполняемый код процесса обычно копируется в подпоток? Разве это тоже не общий доступ, когда процесс обычно создает новую копию исполняемого кода?
5. @San Jacinto: Не совсем. Поток получает свой собственный стек выполнения. Он может использовать / совместно использовать код своих процессов во время выполнения, но ничего не копируется заранее.
Ответ №2:
Ответ на этот вопрос, вероятно, сильно зависит от операционной системы, но является общим правилом :
-
Потоки процесса находятся в том же пространстве виртуальной памяти, что и их родительский элемент. Таким образом, создание потока обходится дешевле, чем создание процесса, потому что базовой операционной системе не нужно создавать полное пространство виртуальной памяти.
-
Подпроцесс — это просто еще один процесс, порожденный родительским.
Комментарии:
1. Если дочерний процесс является дубликатом родительского процесса, не использует ли он одно и то же пространство виртуальной памяти?
2. Подпроцесс — это просто еще один процесс, который живет в своем собственном пространстве. 🙂