2015-06-25 4 views
10

Я читал о Fiber Safe optimizations на MSDN. Он говорит, чтоЧто такое оптимизация безопасности волокна в VC++?

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

Какие волокна безопасные оптимизации? Какова фактическая цель его использования? Почему они говорят, что «поскольку волокно может быть заменено и перезапущено позже в другом потоке, адрес массива TLS не должен кэшироваться или оптимизироваться как общее вспомогательное выражение в вызове функции».? Почему и когда это следует предотвратить?

ответ

15

Fiber s (в этом контексте) - это технология, специфичная для MS, которая позволяет вам вручную управлять планированием «легких» потоков, но они сосуществуют с потоками. https://msdn.microsoft.com/en-us/library/windows/desktop/ms682661(v=vs.85).aspx

Представьте, что у вас есть волокно с длинным куском работы и двумя рабочими потоками.

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

До сих пор не проблема. Если вы не используете локальное хранилище потоков.

__declspec(thread) int global_int; 

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

«Оптимизация волоконно-оптического кабеля» является неправильным. Вам нужно только «/ GT», если вы :, используя Волокна, и, скорее всего, вы не уверены. Вы знали бы, были ли вы, отчасти из-за душевной ненависти к жизни, которую вы проснулись утром, и отчасти по тому, как вы узнаете, что такое Фибры.

--- EDIT ---

«Волокно» довольно широко используется для описания «облегченного» блока исполнения, который не имеет колокола и свистки операционной системы потока, в частности, он не запускается автоматически. В зависимости от ваших требований, действительно, волокна могут быть менее дорогими, чем потоки. Они очень часто связаны с сопрограммами (см. https://en.wikipedia.org/wiki/Fiber_(computer_science)#Fibers_and_coroutines). Обратите внимание, что будущие версии языка C++ могут включать стандартную реализацию концепции Fiber (см. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4024.pdf)

+2

* «Вы знали бы, были ли вы» * :-). –

Смежные вопросы