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