26 lines
3.7 KiB
Markdown
26 lines
3.7 KiB
Markdown
|
---
|
|||
|
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 и по хостам.
|
|||
|
- Если падает одна нить, то может упасть весь процесс со всеми остальными нитями.
|