--- aliases: - fiber tags: - зрелость/🌱 date: - - 2024-03-19 zero-link: - "[[00 Архитектура ПО]]" parents: - "[[Кооперативная многозадачность]]" linked: - "[[Callback]]" --- Green threads объединяют принципы [планировщика ОС](Планировщик%20ОС.md) с механизмами [event-машины](Событийно-ориентированное%20программирование.md), для реализации [кооперативной многозадачности](Кооперативная%20многозадачность.md). Это лёгкие потоки управления, которые не привязаны напрямую к ядрам процессора и управляются не операционной системой, а виртуальной машиной или библиотекой на уровне пользователя. Это позволяет им быть более эффективными в ситуациях, когда большая часть времени тратится на ожидание ввода-вывода. В контексте однопоточного процессора Green Threads могут эффективно распределять процессорное время между множеством задач, переключаясь между ними в моменты, когда выполнение одной из задач блокируется ожиданием ввода-вывода. Такое переключение контекста происходит быстро и с меньшими накладными расходами, чем при использовании стандартных потоков управления операционной системы. С помощью Green Threads можно значительно увеличить количество обрабатываемых запросов на одном ядре процессора, так как переключение между потоками происходит в пользовательском пространстве, минуя системный вызов, что делает переключение контекста более легким и быстрым. Тем не менее, важно отметить, что Green Threads имеют свои ограничения. Например, они не могут использовать преимущества многопроцессорности на уровне операционной системы, так как все потоки исполняются в рамках одного процессорного ядра. Это значит, что их применение наиболее оправдано в высокоуровневых приложениях с интенсивным вводом-выводом, где не требуется интенсивная многопоточная обработка данных. **Проблемы:** - Между нитями отсутствует изоляция: общая память. А значит нужна синхронизация доступа. - На традиционных языках программирования этот подход позволяет утилизировать только один процессор, а нагрузка растет, и рано или поздно приходим к масштабированию – и по CPU и по хостам. - Если падает одна нить, то может упасть весь процесс со всеми остальными нитями.