Уровни потоков

Существует две основных категории потоков с точки зрения реализации:

- пользовательские потоки, которые реализуются через специальные библиотеки потоков;

- потоки уровня ядра, которые реализуются через системные вызовы.

Каждый уровень имеет свои достоинства и недостатки. Некоторые операционные системы позволяют реализовать потоки обоих уровней.

Пользовательские потоки.

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

Преимущества пользовательских потоков в следующем:

- переключение потоков не требует участия ядра - нет переключения из режима задачи в режим ядра;

- планирование может определяться приложением - при этом выбирается наилучший алгоритм;

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

Недостатки пользовательских потоков:

- большинство системных вызовов является блокирующими и ядро блокирует процессы - включая все потоки в пределах процесса;

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

Потоки уровня ядра

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

Преимущества потоков уровня ядра:

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

- процедуры ядра могут быть многопоточными.

Недостатки:

- переключение потоков в пределах одного процесса требует участия ядра.

Основной библиотекой для реализации пользовательских потоков является библиотека потоков POSIX, которая называется pthreads.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: