В компьютерной науке , волокно представляет собой особенно легкий поток выполнения .
Как и потоки, волокна разделяют адресное пространство . Однако волокна используют кооперативную многозадачность, в то время как потоки используют вытесняющую многозадачность . Потоки часто зависят от планировщика потоков ядра, чтобы вытеснить занятый поток и возобновить другой поток; волокна уступают место запуску другого волокна во время выполнения.
Волокна и сопрограммы [ править ]
Волокна описывают, по сути, ту же концепцию, что и сопрограммы . Различие, если оно есть, состоит в том, что сопрограммы являются конструкцией уровня языка, формой потока управления , а волокна - конструкцией системного уровня, рассматриваемой как потоки, которые не работают параллельно. Спорный вопрос, какая из двух концепций имеет приоритет: волокна можно рассматривать как реализацию сопрограмм [1] или как основу для реализации сопрограмм. [2]
Преимущества и недостатки [ править ]
Поскольку волокна работают в многозадачном режиме совместно, безопасность потоков представляет меньшую проблему, чем с заранее запланированными потоками, а конструкции синхронизации, включая спин-блокировки и атомарные операции, не нужны при написании многослойного кода, поскольку они неявно синхронизируются. Однако многие библиотеки неявно предоставляют волокно как метод проведения неблокирующего ввода-вывода ; поэтому рекомендуется соблюдать осторожность и читать документацию. Недостатком является то, что волокна не могут использовать многопроцессорные машины без использования вытесняющих потоков; однако модель потоков M: N, в которой не больше вытесняющих потоков, чем ядра ЦП, может быть более эффективной, чем чистые волокна или чисто вытесняющие потоки.
В некоторых серверных программах волокна используются для мягкой блокировки, чтобы их однопоточные родительские программы могли продолжать работу. В этой конструкции волокна используются в основном для доступа к вводу-выводу, который не требует обработки ЦП. Это позволяет основной программе продолжать то, что она делает. Волокна передают управление однопоточной основной программе, и когда операция ввода-вывода завершается, волокна продолжают работу с того места, где они остановились.
Поддержка операционной системы [ править ]
Для волокон требуется меньше поддержки со стороны операционной системы, чем для потоков. Они могут быть реализованы в современных системах Unix с использованием библиотечных функций getcontext, setcontext и swapcontext в ucontext.h
, как в GNU Portable Threads , или в ассемблере как boost.fiber .
В Microsoft Windows , волокна создаются при помощи ConvertThreadToFiber
и CreateFiber
вызовов; волокно, которое в настоящее время приостановлено, может быть возобновлено в любом потоке. Локальное хранилище по оптоволокну, аналогичное хранилищу локального потока , может использоваться для создания уникальных копий переменных. [3]
ОС Symbian использовала аналогичную концепцию волокон в своем активном планировщике. Активный объект содержал одно волокна будет выполняться с помощью активного планировщика , когда один из нескольких выдающихся асинхронных вызовов завершено. Несколько активных объектов могли ожидать выполнения (в зависимости от приоритета), и каждый из них должен был ограничивать собственное время выполнения.
Примеры реализации волокна [ править ]
Волокна могут быть реализованы без поддержки операционной системы, хотя некоторые операционные системы или библиотеки предоставляют их явную поддержку.
- Win32 предоставляет оптоволоконный API [4] (Windows NT 3.51 SP3 и новее)
- Ruby as Green Threads (до версии 1.9)
- Netscape Portable Runtime (включает реализацию волокон в пользовательском пространстве)
- ребра 2
См. Также [ править ]
Ссылки [ править ]
- ^ Класс волокна
- ↑ Шанкар, Аджай (сентябрь 2003 г.). «Реализация сопрограмм для .NET путем упаковки API неуправляемого волокна» . Журнал MSDN . Microsoft. Архивировано из оригинального 19 августа 2003 года . Источник +24 Декабрь +2006 .
В этой статье показано, как сопрограммы могут быть реализованы для .NET Framework с помощью Fiber API и Managed Extensions для C ++ и как их можно легко использовать с другими .NET-совместимыми языками.
- ^ Волокна , библиотека MSDN
- ^ CreateFiber, MSDN
Внешние ссылки [ править ]
- Переносимые потоки GNU
- «Переносимая библиотека сопрограмм» . Свободный код .
- Fiber Pool Многоядерная среда C ++ на основе волокон для Microsoft Windows.
- Государственные потоки
- Протонити
- ребра 2
- boost.fiber