digital-garden/_inbox/Green thread.md

26 lines
3.7 KiB
Markdown
Raw Permalink Normal View History

2024-06-13 21:01:37 +03:00
---
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 и по хостам.
- Если падает одна нить, то может упасть весь процесс со всеми остальными нитями.