Потоки (нити и веретено)


Операция создания процесса сама по себе достаточно длительная. Чтобы сократить это время, можно использовать существующее адресное пространство процесса для исполнения процессов. Тем более если это 64-битный адресный процесс, который содержит 2^64=18.446.744.073.709.551.616 адресов. Действительно, если адресация процесса позволяет разместить в нем несколько потоков управления, можно сэкономить на выделении дополнительных ресурсов и времени переключения контекста.

Потоки содержат свои регистровый (стек)ипользовательский контексты (данные),а системный контексту них общий. В Windows поток запускается вызовом CreateThread

 

 

Рис. 26 Потоки

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

Пример выгоды многопоточного приложения можно посмотреть на следующем примере:

Рис 27. Работа 1 и 2 потоков

Потоки обладают ещё одной особенностью – размер выделяемой им памяти существенно меньше объема адресного пространства выделяемого для полного процесса. В среднем для потока выделяется около 1 Мб. Таким образом, теоретически в одном процессе x86 (с адресным пространством 4Гб) можно запустить 4096 потоков. Однако для Windows существуют существенные ограничения: во-первых адресное пространство процесса делится пополам и для пользовательских потоков выделяется только его половина. Таким образом, для пользовательских потоков остается 2Гб адресного пространства, но и оно используется не полностью. Часть адресного пространства отъедается для диспетчеризации потоков. Максимальное количество пользовательских потоков на процесс – 2034. Для Linux максимальное количество потоков на процесс задается параметрами ядра /proc/sys/kernel/thread-max. Для x86 RedHat 6.5 – 7722.

Максимальное количество полноценных процессов меньше количества потоков, поскольку расходуется больше адресного пространства. Для Windows 1.25Мб – 1550,Для Linux число процессов и число потоков одинаково RHEL - 7722 процессов, поскольку система не делает между ними различий. (x86 – Windows может управлять 3 миллионами потоков, Linux – более 59 миллионами.)

Переход на 64 адресацию позволяет запустить большее количество потоков и процессов в адресном пространстве. Windows x64 – около 32000 потоков и процессов. Для RHEL x64 – около 64000 потоков и процессов.

 

ГЛАВА 4



Дата добавления: 2017-06-13; просмотров: 1238;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.