Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В компьютерной науке , волокно представляет собой особенно легкий поток выполнения .

Как и потоки, волокна разделяют адресное пространство . Однако волокна используют кооперативную многозадачность, в то время как потоки используют вытесняющую многозадачность . Потоки часто зависят от планировщика потоков ядра, чтобы вытеснить занятый поток и возобновить другой поток; волокна уступают место запуску другого волокна во время выполнения.

Волокна и сопрограммы [ править ]

Волокна описывают, по сути, ту же концепцию, что и сопрограммы . Различие, если оно есть, состоит в том, что сопрограммы являются конструкцией уровня языка, формой потока управления , а волокна - конструкцией системного уровня, рассматриваемой как потоки, которые не работают параллельно. Спорный вопрос, какая из двух концепций имеет приоритет: волокна можно рассматривать как реализацию сопрограмм [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

См. Также [ править ]

Ссылки [ править ]

  1. ^ Класс волокна
  2. Шанкар, Аджай (сентябрь 2003 г.). «Реализация сопрограмм для .NET путем упаковки API неуправляемого волокна» . Журнал MSDN . Microsoft. Архивировано из оригинального 19 августа 2003 года . Источник +24 Декабрь +2006 . В этой статье показано, как сопрограммы могут быть реализованы для .NET Framework с помощью Fiber API и Managed Extensions для C ++ и как их можно легко использовать с другими .NET-совместимыми языками.
  3. ^ Волокна , библиотека MSDN
  4. ^ CreateFiber, MSDN

Внешние ссылки [ править ]

  • Переносимые потоки GNU
  • «Переносимая библиотека сопрограмм» . Свободный код .
  • Fiber Pool Многоядерная среда C ++ на основе волокон для Microsoft Windows.
  • Государственные потоки
  • Протонити
  • ребра 2
  • boost.fiber