Boost.Context— это фундаментальная библиотека, которая обеспечивает своего рода совместную многозадачность на одной нити. Предоставляя абстракцию текущего состояния выполнения в потоке тока, включая стек (с локальными переменными) и указатель стека, все регистры и флаги процессора, а также указатель инструкций,execution_contextпредставляет собой конкретную точку в пути выполнения приложения. Это полезно для построения абстракций более высокого уровня, таких как,кооперативные нити (пользовательские нити)или эквивалентC# ключевое слововыходв C++.
execution_contextпредоставляет средства для приостановки текущего пути выполнения и передачи управления исполнением, тем самым позволяя другому контексту работать на текущем потоке. Этот механизм полного переноса состояния позволяет контексту приостановить выполнение внутри вложенных функций, а затем возобновить с места, где оно было приостановлено. В то время как путь выполнения, представленныйexecution_context, работает только на одной нити, он может быть перенесен на другую нить в любой момент времени.
Переключение контекста между потоками требует системных вызовов (включая ядро ОС), которые могут стоить более тысячи циклов процессора на процессорах x86. Напротив, передача управления между ними требует только нескольких циклов процессора, потому что она не включает системные вызовы, как это делается в одном потоке.
Чтобы использовать классы и функции, описанные здесь, вы можете либо включить конкретные заголовки, указанные в описаниях каждого класса или функции, либо включить главный заголовок библиотеки:
#include <boost/context/all.hpp>
который включает в себя все остальные заголовки в свою очередь.
Все функции и классы содержатся в пространстве именboost::context.
![[Note]](/img/note.png) |
Note |
Эта библиотека требует C++11! |