SobesLab логотип SobesLab

Ответ

Процесс — это экземпляр выполняющейся программы, со своим адресным пространством (памятью). Поток — лёгкий компонент, выполняющийся внутри процесса; все потоки одного процесса разделяют общее адресное пространство, дескрипторы файлов и другие ресурсы процесса. Различия: процессы изолированы друг от друга (один процесс напрямую не может изменять память другого), а потоки разделяют память, поэтому взаимодействовать между потоками проще и быстрее (но нужно синхронизироваться, чтобы не было гонок). Контекстный переключение между потоками в рамках одного процесса обычно легче, чем между процессами. Процессы чаще используют для сильной изоляции и разделения задач, потоки — для параллельного выполнения в рамках одной задачи. На примере веб-сервера: Apache может создавать новые процессы на каждый запрос (prefork), или потоки (worker) — потоки легче, но баг в одном потоке может уронить весь процесс и все потоки (т.к. общая память), в случае процессов повреждается только один запрос. Таким образом: процесс — отдельная программа с полной изоляцией, поток — "легковесное" исполнение внутри программы, разделяющее общие ресурсы.