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

Rationale

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

distinction between coroutines and fibers

Библиотека волокон расширяет корутинную библиотеку, добавляя планировщик и механизмы синхронизации.

  • Коротин дает
  • волоконные блоки

Когда корутин уступает, он передает контроль непосредственно своему абоненту (или, в случае симметричных корутин, назначенному другому корутину). Когда волокно блокируется, оно неявно передает управление планировщику волокна. Корутины не имеют планировщика, потому что им не нужен планировщик..

what about transactional memory

GCC поддерживает транзакционную память с версии 4.7. К сожалению, тесты показывают, что транзакционная память медленнее (около 4х), чем шпинлоки с использованием атомов. После улучшения транзакционной памяти (поддерживающей гибридный tm) блоки будут заменены на __transaction_atomic.

synchronization between fibers running in different threads

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

spurious wakeup

Ложное пробуждение может произойти при использовании<std::condition_variable>: переменная состояния, по-видимому, была сигнализирована, в то время как ожидаемое состояние все еще может быть ложным. Неправильное пробуждение может происходить неоднократно и вызвано в некоторых многопроцессорных системах, где пробуждение<std::condition_variable>полностью предсказуемо замедляет все<std::condition_variable>операции.

<condition_variable>не подлежит ложному пробуждению. Тем не менее, целесообразно проверить бизнес-логическое состояние в цикле<wait()>и #8212; или, эквивалентно, использовать одну из<wait(lock, predicate)>перегрузок.

См. такжеНикаких ложных пробуждений.

migrating fibers between threads

Была интегрирована поддержка миграции волокон между нитями. Определяемый пользователем планировщик должен вызывать<context::detach()>по оптоволоконному контексту на исходной нити и<context::attach()>на целевой поток, передавая оптоволоконный контекст для миграции. (Для получения дополнительной информации о пользовательских планировщиках см.Настройка.) Примеры<work_sharing>и<work_stealing>в каталоге<examples>могут использоваться в качестве чертежа.

См. такжеМигрирующие волокна между нитями.

support for Boost.Asio

ПоддержкаBoost.Asio& #8217;sасинхронный результатне является частью официального API. Для сравнения:<boost::asio::io_service>Обмен нитью с другой главной петлей. Для плавного взаимодействия с произвольной операцией ввода/вывода Asio async см.Then There’s Boost.Asio.

tested compilers

Библиотека была протестирована с GCC-5.1.1, Clang-3.6.0 и MSVC-14.0 в c++11-режиме.

supported architectures

Boost.Fiberзависит отBoost.Context— список поддерживаемых архитектур можно найти здесь.



Дэвид Р. Бутенхоф& #8220;Программирование с помощью POSIX Threads& #8221;


PrevUpHomeNext

Статья Rationale раздела 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:24:42/0.0091328620910645/1