_DEN_, yo Ситуация такова, что пока нет. Очень много другого и пока в списке приоритетных задач это отъехало минимум на полгода. Есть еще одна история - это то как мэйнтениться асио. Если глянуть гитхаб, то не радует по сравнению с конкурентами. Так что пока я в раздумье - стоит ли такой эксперимент мутить на асио с точки зрения перспективы в дальгейшем. Такие дела, сорри что не обрадовал инфой
Таки протестил... мне не понравилось. Те явного ускорения я не увидел + есть беда в связке асио и фиберов. Там прикол, что есть ограничение - при таком подходе нелья сделать пулл потоков (раннить иосервис на несколько потоков) - так как фибер привязан к конкретному потоку, а в асио нет гарантии на каком потоке будет следующий хэндлер выполнен из очереди. Те это официальное орграничение, пока автор занят и не будет это разруливать. Но так принципиально работает. Пока еще для продакшена рановато. В этом плане как ни странно крут голанг... там прям все по православному в этом плане, но пока нету время переводить на него и не факт, что есть смысл.... может новое потом на нем буду.
А зачем такая гарантия? Ведь fibers / coroutines не требуют однопоточности? Каждый последующий возврат к исполнению может происходит в любом другом треде. Здесь вопрос лишь в том, каким образом мы работаем с (общими) данными изнутри coroutine. То есть - это вопрос приложения, а не библиотеки. Или я чего-то не понимаю?
И снова здравствуйте. Надеюсь ты еще тут. Суть драмы: автор Boost.Beast поясняет за модели мультитрединга при работе с Boost.Asio на CppCon 2018. Полное видео про Beast: youtu.be/7FQwAjELMek, конкретно наш вопрос: youtu.be/7FQwAjELMek?t=1341, и вот чувак утверждает, что 1 тред = 1 io_context - это быстрее, чем N тредов в 1 io_context. Как тебе такое, Илон Маск? Что думаешь? PS. порезал ссылки потому что форум парсит это в инлайн видео, и теряет смещение по времени.
_DEN_, хай. пока еще тут. thnx посмотрю. но вообще я решил для себя в таком ключе по сетям - лютый хайлоад - seastar (в перспективе) остальное на go - у меня и он вывозит норм кстати. по асио - там ввели корутины почти уже. в пропозалах и почти как мне надо. но у меня пока все вывозит и так. замонала только асинхронность. вложенные лямбды не сильно упрощают чтение. сложную стэй-машину на колбаках держать в голове - это боль.
А не надо делать их вложенными Должно быть так: функция постановки задачи, в которой прописана лямбда комплишена, который вызывает другую аналогичную функцию: Код (C++): session::async_some_step1() { socket.async_read(..., [&] (error_code ec) { async_some_step2(); }); } session::async_some_step2() { socket.async_write(..., [&] (error_code ec) { if(...) { async_some_step3(); } else { async_some_step4(); } }); } Таким образом у тебя получается плоский список одноэтажных асинк-функций, и граф переходов между ними. Одна функция - один этаж лямбд. И весь процесс в голове держать не надо. Достаточно посмотреть на каждую "вершину графа" по отдельности, и оценить, правильно ли из него выходят "ребра".