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