Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Overview

Boost , Chapter 1. Fiber , Chapter 1. Fiber

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Boost.Fiberобеспечивает основу для микро-/пользовательских ниток (волокон), запланированных совместно. API содержит классы и функции для управления и синхронизации волокон в соответствии сстандартной библиотекой поддержки потоков..

Каждое волокно имеет свой стек.

Волокно может сохранять текущее состояние выполнения, включая все регистры и флаги процессора, указатель команд и указатель стека, а затем восстанавливать это состояние. Идея состоит в том, чтобы иметь несколько путей выполнения, работающих на одной нити с использованием совместного планирования (по сравнению с потоками, которые предварительно запланированы). Работающее волокно решает, когда оно должно уступить, чтобы позволить другому волокну работать (переключение контекста).Boost.Fiberвнутренне используетexecution_contextотBoost.Context; классы в этой библиотеке управляют, планируют и, при необходимости, синхронизируют эти контексты выполнения. Контекстный переключатель между потоками обычно стоит тысячи циклов процессора на x86, по сравнению с волоконным переключателем с менее чем сотней циклов. Волокно работает на одной нити в любой момент времени.

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

#include <boost/fiber/all.hpp>

который включает в себя все остальные заголовки в свою очередь.

Используемые пространства имен:

namespace boost::fibers
namespace boost::this_fiber

Fibers and Threads

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

Нерест дополнительных волокон на данном потоке не распределяет вашу программу по большему количеству аппаратных ядер, хотя он может более эффективно использовать ядро, на котором он работает.

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

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

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

Волокно, запущенное на определенной нити, продолжает работать на этой нити, если не мигрирует. Он может быть разблокирован (см.Блокировканиже) каким-либо другим потоком, но это только переводит волокно из& #8220;заблокирован& #8221;в& #8220;готов& #8221;на его текущем потоке & #8212; это не заставляет волокно возобновляться на потоке, который разблокировал его.

thread-local storage

Если не мигрировать, волокно может получить доступ к локальному хранилищу потоков; однако это хранилище будет совместно использоваться всеми волокнами, работающими на одном потоке. Для локального хранения см.<fiber_specific_ptr>.

BOOST_FIBERS_NO_ATOMICS

Объекты синхронизации волокна, предоставляемые этой библиотекой, по умолчанию безопасно синхронизируют волокна, работающие на разных потоках. Однако этот уровень синхронизации может быть удален (для производительности) путем построения библиотеки с определением<BOOST_FIBERS_NO_ATOMICS>. Когда библиотека построена с помощью этого макроса, вы должны убедиться, что все волокна, относящиеся к конкретному объекту синхронизации, работают в одном потоке. См.Синхронизация.

Blocking

Обычно, когда в этой документации говорится, что конкретное волокноблокирует(или эквивалентноприостанавливается),это означает, что оно дает контроль, позволяя другим волокнам на той же нити работать. Механизмы синхронизации, предоставляемыеBoost.Fiber, имеют такое поведение.

Волокно может, конечно, использовать обычные механизмы синхронизации потоков; однако волокно, которое вызывает любой из этих механизмов, блокирует всю нить, предотвращая тем временем работу любого другого волокна на этой нити. Например, когда волокно хочет ждать значения от другого волокна в той же нити, использование<std::future>было бы неудачным:<std::future::get()>блокировало бы всю нить, не позволяя другому волокну доставлять свое значение. Используйте<future<>>вместо этого.

Аналогично, волокно, которое вызывает нормальную блокирующую операцию ввода/вывода, блокирует весь поток. Авторам клетчатки рекомендуется последовательно использовать асинхронный ввод/вывод.Boost.Asioи другие асинхронные операции ввода/вывода могут быть легко адаптированы дляBoost.Fiber: см.Интеграция волокон с асинхронными обратными вызовами.

Boost.Fiberзависит отBoost.Context. Требуется версия 1.61.0 или выше.

[Note] Note

Эта библиотека требует C++11!


PrevUpHomeNext

Статья Overview раздела Chapter 1. Fiber Chapter 1. Fiber может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Fiber ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:49:12/0.0077359676361084/0