Публикация на пряди из сопрограмм не работает - PullRequest
0 голосов

Большой корпоративный проект. У меня есть один экземпляр io_service: ios _.

Я использую сопрограмму (boost :: asio :: spawn)

Иногда (не всегда), когда я отправляю функцию в boost :: asio :: strand из сопрограммы (!!!!) - эта функция не вызывается. На этом участке ничего нет, и нет ошибки переполнения стека.

Мой вопрос: почему функция не называется? Есть ли какая-то принципиальная раса или проблема в системных ресурсах?

        boost::asio::spawn(ios_, [...]                  (boost::asio::yield_context asio_yield)
        { 
            // BIG asynchronous code

             boost::asio::strand strand1(ios_);
             strand1.post([](){ 
                             // light code. 
                             // sometimes we don't get here
                               cout << "posted to a strand"
                               });

         });

1) Если мы выйдем из сопрограммы перед отправкой в ​​цепочку (например, отправив в ios_) - это работает хорошо, мы всегда получаем функцию

2) если мы используем другой экземпляр boost :: asio :: io_service в boost :: asio :: spawn - он также хорошо работает

3) у нас достаточно потоков в thread_pool (12), когда мы запускаем boost :: asio :: io_service

4) используется: 1.63 буст

Единственный урок, который я усвоил: оставь сопрограмму как можно быстрее. Но мы, программа, ведем себя так - я не получил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...