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