aliases |
tags |
date |
zero-link |
parents |
linked |
|
|
|
|
|
|
Green threads объединяют принципы планировщика ОС с механизмами event-машины, для реализации кооперативной многозадачности. Это лёгкие потоки управления, которые не привязаны напрямую к ядрам процессора и управляются не операционной системой, а виртуальной машиной или библиотекой на уровне пользователя. Это позволяет им быть более эффективными в ситуациях, когда большая часть времени тратится на ожидание ввода-вывода.
В контексте однопоточного процессора Green Threads могут эффективно распределять процессорное время между множеством задач, переключаясь между ними в моменты, когда выполнение одной из задач блокируется ожиданием ввода-вывода. Такое переключение контекста происходит быстро и с меньшими накладными расходами, чем при использовании стандартных потоков управления операционной системы.
С помощью Green Threads можно значительно увеличить количество обрабатываемых запросов на одном ядре процессора, так как переключение между потоками происходит в пользовательском пространстве, минуя системный вызов, что делает переключение контекста более легким и быстрым.
Тем не менее, важно отметить, что Green Threads имеют свои ограничения. Например, они не могут использовать преимущества многопроцессорности на уровне операционной системы, так как все потоки исполняются в рамках одного процессорного ядра. Это значит, что их применение наиболее оправдано в высокоуровневых приложениях с интенсивным вводом-выводом, где не требуется интенсивная многопоточная обработка данных.
Проблемы:
- Между нитями отсутствует изоляция: общая память. А значит нужна синхронизация доступа.
- На традиционных языках программирования этот подход позволяет утилизировать только один процессор, а нагрузка растет, и рано или поздно приходим к масштабированию – и по CPU и по хостам.
- Если падает одна нить, то может упасть весь процесс со всеми остальными нитями.