Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством.
С каждым потоком связывается:
· Счетчик выполнения команд
· Регистры для текущих переменных
· Стек
· Состояние
Потоки делят между собой элементы своего процесса:
· Адресное пространство
· Глобальные переменные
· Открытые файлы
· Таймеры
· Семафоры
· Статистическую информацию.
В остальном модель идентична модели процессов. В POSIX и Windows есть поддержка потоков на уровне ядра.
Преимущества использования потоков
Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.
Повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.
Реализация потоков в пространстве пользователя, ядра и смешанное
А - потоки в пространстве пользователя
B - потоки в пространстве ядра
В случае А ядро о потоках ничего не знает. Каждому процессу необходима таблица
потоков, аналогичная таблице процессов.
Преимущества случая А:
· Такую многопоточность можно реализовать на ядре не поддерживающим многопоточность
· Более быстрое переключение, создание и завершение потоков
· Процесс может иметь собственный алгоритм планирования.
Недостатки случая А:
· Отсутствие прерывания по таймеру внутри одного процесса
· При использовании блокирующего (процесс переводится в режим ожидания, например: чтение с клавиатуры, а данные не поступают) системного запроса все остальные потоки блокируются.
· Сложность реализации