Главная  /  Правка версии 1  /  Правка версии 2  /   /  Область пользователей

Отличия "Потокобезопасность" вер. 1 сравн. вер. 2

Содержимое:

## Эмпирическое правило
Все классы не являются потокобезопасными для одновременного доступа из нескольких
потоков, если иное явно не указано.
В целом, есть несколько потокобезопасными классов в CppCMS,
к функциям-членам которых возможен одновременный доступ
к методам которых возможен одновременный доступ
из нескольких потоков:
- `cppcms::service`
- `cppcms::applications_pool`
- `cppcms::thread_pool`
- `cppcms::views::pool`
- `booster::aio::io_service`
Во всех остальных случаях следует принимать особые меры
в целях предотвращения доступа к одному и тому же классу
из нескольких потоков.
## Потоки в CppCMS
Есть несколько типов потоков в CppCMS:
- Цикл обработки событий (Event Loop) - главный поток, запускающий `cppcms::service::run()` потоков.
- Потоковый пул (Thread Pool) - специальный пул потоков, в котором выполняются все синхронные запросы.
- Некоторые фоновые потоки - вспомогательные потоки, которые в основном малоинтересны.
## Взаимодействие между потоками
Сразу после запуска CppCMS-сервиса все синхронные приложения начинают выполняться в потоковом пуле.
Если синхронное приложение CppCMS хочет выполнить
какую-либо операцию в цикле обработки событий, например,
взаимодействовать с некоторым асинхронным приложением
передачей каких-нибудь данных или передачей ему своего HTTP-контекста,
оно должно сделать это с помощью функции-члена `cppcms::service::post()`
оно должно сделать это с помощью метода `cppcms::service::post()`
и соответствующего обработчика исполнения.
Этот обработчик будет передан в очередь цикла обработки событий
и выполнен в его потоке.
Если асинхронное приложение или любой другой объект,
работающий в цикле обработки событий хочет выполнить какую-либо
продолжительную работу, блокирующую или тяжелую операцию,
оно может сделать это передачей обработчика исполнения в потоковый пул.
Обратите внимание, что как только работа будет завершена, обработчик должен уведомить
о своем завершении, "отпостив" какой-либо обработчик в цикл обработки событий так же,
как описано выше.
Различные приложения никогда не должны получать доступ к своим
внутренним состояниям непосредственно, т.к. это небезопасно.

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница


Валидация CSS | Валидация XHTML 1.0