Какие ресурсы распределяются между потоками? - PullRequest
226 голосов
/ 19 ноября 2009

Недавно мне задали вопрос в интервью, в чем разница между процессом и потоком. Действительно, я не знал ответа. Я немного подумал и дал очень странный ответ.

Потоки разделяют одну и ту же память, процессы - нет. После ответа на это интервьюер злобно улыбнулся и задал мне следующие вопросы:

Q. Знаете ли вы сегменты, на которые программа делится?

Мой ответ: Да (думал, что это легко) Стек, Данные, Код, Куча

Q. Итак, скажите мне: какие сегменты разделены потоками?

Я не мог ответить на это и в итоге сказал все из них.

Пожалуйста, кто-нибудь может представить правильные и впечатляющие ответы на разницу между процессом и потоком?

Ответы [ 13 ]

1 голос
/ 19 ноября 2009

Поток разделяет кучу (есть исследование о куче, специфичной для потока), но текущая реализация разделяет кучу. (и конечно же код)

0 голосов
/ 22 января 2019

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

  • идентификатор процесса и идентификатор родительского процесса;
  • идентификатор группы процессов и идентификатор сеанса;
  • управляющий терминал;
  • учетные данные процесса (идентификаторы пользователей и групп);
  • дескрипторы открытых файлов;
  • блокировки записей, созданные с использованием fcntl();
  • расположение сигналов;
  • информация о файловой системе: umask, текущий рабочий каталог и корневой каталог;
  • интервальные таймеры (setitimer()) и POSIX-таймеры (timer_create());
  • Значения отмены семафора системы V (semadj) (раздел 47.8);
  • лимиты ресурсов;
  • процессорного времени потребляется (как возвращается times());
  • использованных ресурсов (как возвращено getrusage()); и
  • хорошее значение (устанавливается setpriority() и nice()).

Среди атрибутов, которые различны для каждого потока, есть следующее:

  • идентификатор потока (раздел 29.5);
  • маска сигнала;
  • данные, специфичные для потока (раздел 31.3);
  • стек альтернативных сигналов (sigaltstack());
  • переменная errno;
  • среда с плавающей точкой (см. fenv(3));
  • политика и приоритет планирования в реальном времени (разделы 35.2 и 35.3);
  • Сродство к процессору (специфично для Linux, описано в разделе 35.4);
  • возможности (специфичные для Linux, описаны в главе 39); и
  • стек (локальные переменные и информация о связи между вызовами функций).

Выдержка из: Интерфейс программирования Linux: Справочник по системному программированию в Linux и UNIX, Майкл Керриск , стр. 619

0 голосов
/ 02 мая 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...