Что проще для установки ОС, нового процесса или нового потока? - PullRequest
2 голосов
/ 03 июня 2011

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

Ответы [ 5 ]

3 голосов
/ 03 июня 2011

Создание нового потока должно быть быстрее, чем нового процесса.

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

Поток является «дочерним» для процесса.Поток - это просто контекст выполнения (регистры, стек и локальное состояние потока), который может выполняться на другом аппаратном ядре или планироваться на том же ядре, что и другие потоки в процессе.Несколько потоков совместно используют ресурсы одного процесса, включая адресное пространство и дескрипторы ОС, которыми владеет процесс.

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

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

Работа с заданиями - это еще одна аналогичная многоядерная структура с меньшим весом, в которой у вас есть несколько потоков с заданием.очереди задач для выполнения.Они запускают задачи в своих очередях и затем спят, когда очереди пусты.

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

3 голосов
/ 03 июня 2011

Ну, традиционно потоки называются «облегченными процессами», поэтому я думаю, что их проще настроить.

IIRC в Linux, как разветвление, так и запуск нового потока (clone(2)) реализованы в глубине с помощью вызова одной и той же функции (do_fork), и время установки действительно сопоставимо для приличных чисел.Для большого количества вилок / клонов (например, тысяч) они начинают складываться.

В TLPI есть хорошее сравнение:

  • Форкировка 100 000 раз: 22,27 секунды
  • Клонирование 100 000 раз: 2,97 секунды

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

реальное преимущество потоков заключается в том, что им не нужен IPC.

1 голос
/ 03 июня 2011

Основное различие между потоками и процессами 1.Потоки разделяют адресное пространство процесса, создал это; процессы имеют свой собственный адрес.

2.Потоки имеют прямой доступ к сегменту данных своего процесс; процессы имеют свою собственную копию сегмента данных родительского процесса.

3.Потоки могут напрямую связываться с другими потоками его процесс; процессы должны использовать межпроцессное взаимодействие общаться с родственными процессами.

4.Находы почти не имеют накладных расходов; процессы имеют значительные накладные расходы.

5.Новые темы легко создаются; новые процессы требуют дублирование родительского процесса.

6.Потоки могут осуществлять значительный контроль над потоками тот же процесс; процессы могут только контролировать дочерние процессы.

7. Изменения в главном потоке (отмена, приоритет изменить и т. д.) может повлиять на поведение других потоков процесса; Изменения в родительском процессе не влияет на дочерние процессы.

1 голос
/ 03 июня 2011

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

0 голосов
/ 03 июня 2011

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

Rgds, Martin

...