В чем разница между процессом и процессом с несколькими потоками?

#multithreading #process #operating-system

#многопоточность #процесс #операционная система

Вопрос:

введите описание изображения здесь

Как мы можем видеть, процесс, в котором есть части стека, кучи, данных, текста. Как четкое объяснение, которое я получил из книг и многих других ресурсов. Все понятно.

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

Здесь вы можете видеть, что стек, данные — это то же самое, что также упоминается на приведенной выше диаграмме. но мы видим, что в нем есть и другие части. например, файлы? код? что подразумевается под файлами и кодом? в любом случае, если мы рассмотрим 1.файлы 2.код, прочитаем определения и примем его. тогда почему автор не упомянул их в приведенной выше схеме процесса?

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

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

Ответ №1:

Это верхняя картинка для однопоточного процесса:

 high  stack
      free-address-space
      heap
      data
low   text
  

В многопоточном процессе вы получаете несколько стеков в верхней части адресного пространства с некоторым свободным адресным пространством между ними:

 high  stack thread 1
      free-address-space
      stack thread 2
      free-address-space
      ...
      stack thread N
      free-address-space
      heap
      data
low   text
  

Максимальный размер стека для каждого потока фиксирован (см. ulimit -a , по умолчанию 8 МБ в Linux), так что ОС может продолжать создавать новые стеки для новых потоков от верхней части адресного пространства до нижней.