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

3.7 KiB
Raw Blame History

aliases tags date zero-link parents linked
fiber
зрелость/🌱
2024-03-19
00 Архитектура ПО
Кооперативная многозадачность
Callback

Green threads объединяют принципы планировщика ОС с механизмами event-машины, для реализации кооперативной многозадачности. Это лёгкие потоки управления, которые не привязаны напрямую к ядрам процессора и управляются не операционной системой, а виртуальной машиной или библиотекой на уровне пользователя. Это позволяет им быть более эффективными в ситуациях, когда большая часть времени тратится на ожидание ввода-вывода.

В контексте однопоточного процессора Green Threads могут эффективно распределять процессорное время между множеством задач, переключаясь между ними в моменты, когда выполнение одной из задач блокируется ожиданием ввода-вывода. Такое переключение контекста происходит быстро и с меньшими накладными расходами, чем при использовании стандартных потоков управления операционной системы.

С помощью Green Threads можно значительно увеличить количество обрабатываемых запросов на одном ядре процессора, так как переключение между потоками происходит в пользовательском пространстве, минуя системный вызов, что делает переключение контекста более легким и быстрым.

Тем не менее, важно отметить, что Green Threads имеют свои ограничения. Например, они не могут использовать преимущества многопроцессорности на уровне операционной системы, так как все потоки исполняются в рамках одного процессорного ядра. Это значит, что их применение наиболее оправдано в высокоуровневых приложениях с интенсивным вводом-выводом, где не требуется интенсивная многопоточная обработка данных.

Проблемы:

  • Между нитями отсутствует изоляция: общая память. А значит нужна синхронизация доступа.
  • На традиционных языках программирования этот подход позволяет утилизировать только один процессор, а нагрузка растет, и рано или поздно приходим к масштабированию и по CPU и по хостам.
  • Если падает одна нить, то может упасть весь процесс со всеми остальными нитями.