Как соотносятся понятия потока оси и легковесного потока в контексте многопоточности?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Поток ОС — это сущность, которую планирует операционная система, с собственным стеком и состоянием выполнения. Легковесный поток — это, как правило, Java-поток на уровне JVM, который отображается на поток ОС и выполняет код параллельно с другими. На практике в классической модели Java Thread почти всегда соответствует одному потоку ОС.
Определение:
Поток ОС — это системный поток, управляемый ядром операционной системы. Он может исполняться независимо и конкурировать за процессор с другими потоками.
Легковесный поток — это более “высокоуровневая” абстракция потока, обычно имеющая меньшую стоимость создания и переключения по сравнению с процессом. В Java в традиционной модели java.lang.Thread — это поток, который обычно маппится на нативный поток ОС. Поэтому соотношение такое: один Java-поток обычно соответствует одному потоку ОС, а “легковесность” означает, что поток дешевле процесса, но всё равно не бесплатен.
Пример использования:
Если сервер обрабатывает запросы в нескольких потоках, каждый запрос может выполняться в отдельном Thread. JVM создаст нативные потоки ОС, и планировщик ОС будет распределять их по ядрам процессора.
public class App {
public static void main(String[] args) {
Thread t1 = new Thread(() -> System.out.println("Task 1"));
Thread t2 = new Thread(() -> System.out.println("Task 2"));
t1.start();
t2.start();
}
}
Пояснение кода:
Код показывает два Java-потока. При вызове start() JVM создаёт и запускает соответствующие нативные потоки ОС. Метод run() в виде лямбды содержит полезную работу, а реальное параллельное выполнение происходит именно после start(), а не при прямом вызове run().
Шаги выполнения:
- Создаются два объекта
Thread. - Для каждого задаётся задача через лямбду.
- Вызов
start()переводит поток в состояние исполнения. - Планировщик ОС решает, на каком ядре и когда выполнять каждый поток.
- Оба задания могут выполниться параллельно или псевдопараллельно, в зависимости от числа ядер и загрузки системы.
Ключевые моменты:
- Поток ОС — это сущность уровня операционной системы.
- Легковесный поток — это поток, который дешевле процесса, но всё равно требует ресурсов.
- В классической Java-модели
Threadобычно соответствует нативному потоку ОС. - Переключение между потоками дешевле, чем между процессами, но не бесплатно.
- Параллелизм в Java-
Threadограничен возможностями ОС и количеством ядер. start()запускает новый поток, аrun()сам по себе новый поток не создаёт.