[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-ustroystvo-pk-i-seti-chem-otlichaetsya-protsess-ot-potoka":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":21,"progress":22,"seo":23},1157,"chem-otlichaetsya-protsess-ot-potoka",7,"ustroystvo-pk-i-seti","Устройство ПК и сети","🖥️","Чем отличается процесс от потока?","Процесс — это экземпляр выполняющейся программы с собственным изолированным адресным пространством, кодом, данными и ресурсами. Поток — это единица выполнения внутри процесса; все потоки одного процесса разделяют общее адресное пространство, но имеют собственный стек вызовов и набор регистров.\n\n> Аналогия: процесс — это отдельная квартира в доме (свои стены, своя мебель, свой замок). Потоки — это жильцы одной квартиры: они делят общую кухню и гостиную (память), но у каждого своя комната (стек).\n\n### Ключевые отличия\n\n| Характеристика | Процесс | Поток |\n|---|---|---|\n| Адресное пространство | Собственное, изолированное | Общее с другими потоками процесса |\n| Память | Своя куча (heap), стек, данные | Свой стек, но общая куча |\n| Создание | Дорогое (~мс, копирование структур ОС) | Дешёвое (~мкс) |\n| Переключение контекста | Дорогое (смена таблицы страниц, сброс TLB) | Дешевле (не нужно менять адресное пространство) |\n| Обмен данными | Через IPC (pipes, shared memory, сокеты) | Напрямую через общую память |\n| Изоляция | Полная (ошибка в одном процессе не затронет другой) | Низкая (ошибка в одном потоке может разрушить весь процесс) |\n| Пример | Браузер Chrome — каждая вкладка в отдельном процессе | Веб-сервер — каждый запрос обрабатывается отдельным потоком |\n\n### Переключение контекста (Context Switch)\n\nКогда ОС переключает выполнение с одного процесса\u002Fпотока на другой, она:\n\n1. Сохраняет состояние текущего (регистры процессора, Program Counter, указатель стека).\n2. Загружает сохранённое состояние следующего.\n3. Для переключения процессов дополнительно: переключает таблицу страниц, что вызывает сброс TLB и последующие TLB miss при обращениях к памяти.\n\nСтоимость переключения:\n+ Между потоками одного процесса: ~1-10 мкс.\n+ Между процессами: ~10-100 мкс (из-за сброса TLB).\n\n### Когда выбирать процессы, а когда потоки\n\n| Критерий | Процессы | Потоки |\n|---|---|---|\n| Нужна изоляция сбоев | Да (падение одного не затронет другие) | Нет (один упавший поток роняет всё) |\n| Нужен быстрый обмен данными | Нет (IPC — накладные расходы) | Да (общая память) |\n| Экономия ресурсов | Нет (каждый процесс — отдельное адресное пространство) | Да (общая куча) |\n| Безопасность | Выше (изоляция на уровне ОС) | Ниже (общая память — race conditions) |\n\n### В Java\n\n+ `java.lang.Thread` — создаёт поток ОС (в HotSpot JVM).\n+ **Виртуальные потоки (Virtual Threads, Java 21+)** — лёгкие потоки, управляемые JVM, не привязанные 1:1 к потокам ОС. Тысячи виртуальных потоков могут работать на небольшом числе потоков ОС (carrier threads). Оптимальны для I\u002FO-bound задач.\n+ `ProcessBuilder` \u002F `Runtime.exec()` — создание дочерних процессов из Java.\n\n```java\n\u002F\u002F Создание потока\nThread thread = new Thread(() -> System.out.println(\"Hello from thread\"));\nthread.start();\n\n\u002F\u002F Создание процесса\nProcessBuilder pb = new ProcessBuilder(\"ls\", \"-la\");\nProcess process = pb.start();\n```\n\n### Вывод\n\nПроцесс — изолированная единица с собственным адресным пространством. Поток — лёгкая единица выполнения внутри процесса с общей памятью. Потоки дешевле в создании и переключении, но требуют синхронизации при доступе к общим данным. Процессы надёжнее в изоляции сбоев.\n\n> **На собеседовании:** один из самых частых junior-вопросов. Ключевое: процессы изолированы (своё адресное пространство), потоки делят память (общий heap). Обязательно упомяните стоимость переключения контекста и тот факт, что Java-потоки — это потоки ОС. Упоминание виртуальных потоков Java 21 покажет, что вы следите за развитием платформы.","","junior",[15,16,17,18,19,20],"virtual threads","context switch","computer-fundamentals","thread","процесс","поток",[],null,{"title":24,"description":25,"ogTitle":26,"ogDescription":27,"keywords":28,"schemaAnswer":34,"featuredSnippetReady":35},"Процесс vs поток — отличия, context switch, виртуальные потоки — Gymterview","Процесс имеет изолированное адресное пространство. Потоки разделяют память процесса. Переключение потоков ~1–10 мкс, процессов ~10–100 мкс. Virtual Threads Java 21.","Процесс vs поток — изоляция, память и context switch","Процесс — изолированное адресное пространство. Поток — единица выполнения внутри процесса с общей кучей. Context switch потоков в 10 раз дешевле процессов.",[29,30,31,32,33],"процесс vs поток отличия","context switch стоимость","thread process разница","виртуальные потоки Java 21","переключение контекста","Процесс имеет собственное изолированное адресное пространство, создание дорогое (~мс). Поток — единица выполнения внутри процесса, потоки разделяют heap, но имеют свой стек. Переключение контекста потоков (~1–10 мкс) дешевле процессов (~10–100 мкс). В Java: Thread создаёт поток ОС, Virtual Threads (Java 21+) — лёгкие потоки JVM, не привязанные 1:1 к потокам ОС.",true]