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