Архив документации OpenNet.ru /
Раздел "Программирование, языки" /
Индекс
Next: Преимущества многопоточности.
Up: Потоки (threads).
Previous: Потоки (threads).
Contents
С помощью процессов можно организовать параллельное выполнение программ.
Для этого процессы клонируются с помощью вызовов fork() или
exec(), а затем между ними организуется взаимодействие средствами
IPC. Это довольно дорогостоящий с точки зрения ресурсов процесс.
С другой стороны, для организации параллельного выполнения и взаимодействия
можно использовать механизм многопоточности. Основной единицей здесь
является поток.
Поток представляет собой облегченную версию процесса. Чтобы понять,
в чем состоит его особенность, необходимо вспомнить основные характеристики
процесса:
- Процесс владеет определенными ресурсами. Он размещен в некотором виртуальном
адресном пространстве, содержащем образ процесса. Кроме того, процесс
управляет другими ресурсами (файлы, устройства ввода - вывода и т.д.).
- Процесс подвержен диспетчеризации. Он определяет порядок выполнения
одной или нескольких программ, при этом выполнение может перекрываться
с другими процессами. Каждый процесс имеет состояние выполнения и
приоритет диспетчеризации.
Если рассматривать эти характеристики независимо друг от друга (как
это принято в современной теории ОС), то:
- Владелец ресурса обычно называется процессом или задачей. Ему присущи:
- виртуальное адресное пространство;
- индивидуальный доступ к процессору, другим процессам, файлам, и ресурсам
ввода - вывода.
- Модуль для диспетчеризации обычно называется потоком или облегченным
процессом. Ему присущи:
- состояние выполнения (активное, готовность, и т.д.);
- сохранение контекста потока в неактивном состоянии;
- стек выполнения и некоторую статическую память для локальных переменных;
- доступ к пространству памяти и ресурсам своего процесса.
Все потоки процесса разделяют общие ресурсы. Изменения, вызванные
одним потоком, становятся немедленно доступными другим потокам.
При корректной реализации потоки имеют определенные преимущества над
процессами. Им требуется:
- Меньше времени для создания нового потока, поскольку создаваемый поток
использует адресное пространство текущего процесса.
- Меньше времени для завершения потока.
- Меньше времени для переключения между двумя потоками в пределах того
же самого процесса.
- Меньше коммуникационных расходов, поскольку потоки разделяют все ресурсы,
и в частности адресное пространство. Данные, продуцируемые одним из
потоков, немедленно становятся доступными всем другим потокам.
2003-12-09
Архив документации на OpenNet.ru