Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гл.3 ОС буклет.doc
Скачиваний:
9
Добавлен:
11.11.2018
Размер:
353.79 Кб
Скачать

3.2.3. Преимущества и недостатки многопотоковости

Назовем проблемы, которые могут быть решены с помощью потоков.

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

  • Для поддержки потоков нужно меньше ресурсов, чем для поддержки процессов (например, нет необходимости выделять для потоков адресное пространство).

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

Несмотря на пересчитанные преимущества, использование потоков не является универсальным средством решения проблем параллелизма, и связанное с некоторыми трудностями:

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

-довольно часто внедрение многопотоковости приводит к снижению надежности приложений.

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

-использование потоков может вызвать снижение производительности приложений.

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

Преимущества и недостатки использования потоков нужно учитывать во время выполнения любого программного проекта. Прежде всего целесообразно рассматривать возможность решить задачу в рамках модели процессов. При этом, однако, следует принимать во внимание не только текущие требования заказчика, но и необходимость развития приложения, его масштабирование и т.п.. Возможно, с учетом этих факторов использования потоков будет оправданное.

3.2.4. Способы реализации модели потоков

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

Поток пользователя - это последовательность выполнения команд в адресном пространстве процесса.

Ядро ОС не имеет информации о таких потоках, вся работа с ними выполняется в режиме пользователя. Средства поддержки потоков пользователя предоставляют специальные системные библиотеки; они доступные для прикладных программистов в виде библиотечных функций. Библиотеки поддержки потоков в наше время обычно реализуют набор функций, определенный стандартом POSIX (соответствующий раздел стандарта называют POSIХ.lb).

Поток ядра - это последовательность выполнения команд в адресному пространстве ядра.

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

Соотношение между двумя видами потоков определяет реализацию модели потоков. Есть несколько вариантов такой реализации (схем многопотоковости); рассмотрим важнейшие из них (рис. 3.1).

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

♦ Схема М:1 не дает возможности воспользоваться многопроцесорними архитектурами, поскольку определить, какой именно код будет выполняться на каждом из процессоров, может только ядро ОС. В результате все потоки одного процесса всегда будут выполняться на одном процессоре.

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

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

Схема многопотоковости М:N. В этой схеме присутствуют как потоки ядра, так и потоки пользователя, которые отображаются на потоки ядра так, что один поток ядра может отвечать нескольким потокам пользователя. Число потоков ядра может быть изменено программистом для достижения максимальной производительности. Распределение потоков пользователя по потокам ядра выполняется в режиме пользователя, планирование потоков ядра - в режиме ядра. Схема сложна в реализации и сегодня сдает свои позиции схеме 1:1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]