Почему потоки называются легкими процессами?
Поток является "легким", потому что большая часть накладных расходов уже выполнена путем создания его процесса.
Я нашел это в одном из уроков.
Может кто-нибудь уточнить, что это значит?
Ответы
Ответ 1
Утверждение о том, что потоки являются "легкими", - в зависимости от платформы - не обязательно надежным.
Поток операционной системы должен поддерживать выполнение собственного кода, например. написанный на C. Таким образом, он должен обеспечить стеки приличного размера, обычно измеряемые в мегабайтах. Поэтому, если вы запустили 1000 потоков (возможно, чтобы поддерживать 1000 одновременных подключений к вашему серверу), у вас будет потребность в памяти 1 ГБ в вашем процессе, прежде чем вы начнете выполнять какую-либо реальную работу.
Это настоящая проблема в масштабируемых серверах, поэтому они не используют потоки, как если бы они были легкими вообще. Они рассматривают их как тяжеловесные ресурсы. Вместо этого они могут создать ограниченное количество потоков в пуле и позволить им получать рабочие элементы из очереди.
Так как это означает, что потоки долговечны и малочисленны, лучше использовать вместо них процессы. Таким образом, вы получаете изоляцию адресного пространства, и на самом деле нет проблем с исчерпанием ресурсов.
Вкратце: будьте осторожны с "маркетинговыми" требованиями, сделанными от имени потоков. Параллельная обработка велик (все чаще это будет иметь важное значение), но потоки являются лишь одним из способов ее достижения.
Ответ 2
Создание процесса является "дорогостоящим", поскольку оно должно создать полное новое пространство виртуальной памяти для процесса с собственным адресным пространством. "дорогое" означает много процессорного времени.
Нити не нужно делать, просто измените несколько указателей, так что это намного "дешевле", чем создание процесса. Причина, в которой эти потоки не нужны, заключается в том, что они запускаются в адресном пространстве и виртуальной памяти родительского процесса.
Каждый процесс должен иметь хотя бы один поток. Поэтому, если вы думаете об этом, создание процесса означает создание процесса И создание потока. Очевидно, что создание только потока потребует меньше времени и работы с компьютером.
Кроме того, потоки являются "легкими", потому что потоки могут взаимодействовать без необходимости взаимодействия между процессами. Переключение между потоками "дешевле", чем переключение между процессами (опять же, просто перемещение некоторых указателей). И межпроцессное общение требует более дорогой связи, чем потоки.
Ответ 3
Нити внутри процесса используют одно и то же пространство виртуальной памяти, но каждый из них имеет отдельный стек и, возможно, "потоковое локальное хранилище", если оно реализовано. Они легкие, потому что контекстный переключатель - это просто случай переключения указателя стека и счетчика программ и восстановления других регистров, поскольку переключатель контекста процесса включает также переключение контекста MMU.
Кроме того, связь между потоками внутри процесса является легкой, поскольку они разделяют адресное пространство.
Ответ 4
процесс:
- идентификатор процесса
- окружающая среда
- папки
- Регистры
- Стек
- куча
- дескриптор файла
- разделяемые библиотеки
- инструменты межпроцессной связи (каналы, семафоры, очереди, общая память и т.д.).
- конкретные источники ОС
Тема:
- стек
- Регистры
- (для планировщика, как приоритет, политика и т.д.).
- данные конкретных потоков
- конкретные источники ОС
Ответ 5
Процесс содержит один или несколько потоков в нем, и поток может делать все, что может сделать процесс. Кроме того, потоки внутри процесса имеют одинаковое адресное пространство, из-за чего стоимость связи между потоками низкая, поскольку она использует один и тот же раздел кода, раздел данных и ресурсы ОС, поэтому все эти функции потока делают его "легким процессом".