Процесс — это экземпляр выполняющейся программы, имеющий собственное адресное пространство, выделенные системные ресурсы (файловые дескрипторы, сокеты и т.д.) и как минимум один поток выполнения. Процессы изолированы друг от друга.
Поток (нить) — это наименьшая единица выполнения, которая может быть запланирована операционной системой. Он существует в рамках процесса, разделяет его адресное пространство и ресурсы, но имеет собственный стек вызовов, указатель инструкций и регистры.
Основные различия:
| Параметр | Процесс | Поток (нить) |
|---|---|---|
| Адресное пространство | Собственное | Разделяет с другими потоками процесса |
| Распределение ресурсов | Требует создания инфраструктуры ОС | Дешевле в создании |
| Изоляция | Высокая, процессы изолированы | Частичная, потоки могут напрямую общаться |
| Переключение | Дорого, требует смены контекста ОС | Дешевле |
| Завершение | Завершение процесса приводит к завершению всех его потоков | Завершение одного потока не влияет на другие потоки процесса |