Волокно (информатика) - Fiber (computer science)

В Информатика, а волокно особенно легкий поток исполнения.

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

Волокна и сопрограммы

Волокна описывают по существу ту же концепцию, что и сопрограммы. Различие, если оно есть, состоит в том, что сопрограммы представляют собой конструкцию уровня языка, форму поток управления, в то время как волокна представляют собой конструкцию системного уровня, рассматриваемую как потоки, которые не выполняются одновременно. Спорный вопрос, какая из двух концепций имеет приоритет: волокна можно рассматривать как реализацию сопрограмм,[1] или как подложка для реализации сопрограмм.[2]

Преимущества и недостатки

Поскольку волокна работают одновременно в многозадачном режиме, безопасность потоков меньше проблем, чем с заранее запланированными потоками, а конструкции синхронизации, включая спин-блокировки и атомарные операции не нужны при написании расслоенного кода, поскольку они неявно синхронизируются. Однако многие библиотеки неявно предоставляют волокно как метод проведения неблокирующий ввод / вывод; поэтому рекомендуется соблюдать осторожность и читать документацию. Недостатком является то, что волокна нельзя использовать мультипроцессор машины, не использующие также вытесняющие потоки; однако M: N модель резьбы с не более вытесняющими потоками, чем ядра ЦП, могут быть более эффективными, чем чистые волокна или чисто вытесняющие потоки.

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

Поддержка операционной системы

Меньше поддержки со стороны Операционная система нужен для волокон, чем для ниток. Их можно реализовать в современном Unix системы, использующие библиотечные функции getcontext, setcontext и swapcontext в ucontext.h, как в Переносимые потоки GNU, или на ассемблере как boost.fiber.

На Майкрософт Виндоус, волокна создаются с использованием ConvertThreadToFiber и CreateFiber звонки; волокно, которое в настоящее время приостановлено, может быть возобновлено в любом потоке. Локальное хранилище по оптоволокну, аналог локальное хранилище потока, может использоваться для создания уникальных копий переменных.[3]

ОС Symbian использовал аналогичную концепцию для волокон в своем активном планировщике. An активный объект содержал одно волокно, которое должно было выполняться активным планировщиком после завершения одного из нескольких ожидающих асинхронных вызовов. Несколько активных объектов могли ожидать выполнения (в зависимости от приоритета), и каждый из них должен был ограничить собственное время выполнения.

Примеры реализации волокна

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

Смотрите также

Рекомендации

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

внешняя ссылка