digital-garden/_inbox/Green thread.md
2024-06-13 21:01:37 +03:00

26 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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