Про epoll и select я вовсе не упоминал 🙂 Про ОС не говорил намеренно, это может подчеркнуть платформенную независимость Asio. Последний абзац про команды совсем не понял. Не могли бы вы, пожалуйста, уточнить, что имеете в виду?
Так тоже можно 🙂 Я к тому, что Asio предоставляет хелпер async_initiate, чтобы подключать свои асинхронные операции и пользоваться тем, что в библиотеке уже реализовано — вроде use_awaitabe, use_future, as_tuple, consign и т.д.
Я имел ввиду Windows IO Conpletion Ports. asio называет этот функционал winiocp в исходниках, поэтому так и написал :) К сожалению я не уделял много внимания тому как работает asio на винде, знаю только то что asio::random_access_file будет вам доступен если вы на windows благодаря io completion ports. Упомянул я об этом только для того чтобы дать понять что эта фича библиотеки работает не на всех платформах.
Вопрос отличный!) Дело в том что если смотреть на внутренности asio то там в некоторых случаях так и происходит. Вы можете создать asio::thread_pool и использовать его только с одним диском. Да на самом деле создать поток, и запустить в нем asio::io_context сделает то же самое. И потом использовать thread_pool или io_context (библиотека называет их execution_contexts) вместе с нужным диском. В каждом контексте действительно есть своя очередь которая и будет разгребаться потоком/потоками.
Если говорить про размер asio, позволю себе отметить что standalone версия библиотеки представляет из себя header only библиотеку что, по моему скромному мнению, достаточно легковесно:)
Information
Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Про epoll и select я вовсе не упоминал 🙂 Про ОС не говорил намеренно, это может подчеркнуть платформенную независимость Asio. Последний абзац про команды совсем не понял. Не могли бы вы, пожалуйста, уточнить, что имеете в виду?
Так тоже можно 🙂 Я к тому, что Asio предоставляет хелпер
async_initiate
, чтобы подключать свои асинхронные операции и пользоваться тем, что в библиотеке уже реализовано — вродеuse_awaitabe
,use_future
,as_tuple
,consign
и т.д.Большое спасибо за ваш комментарий! Сейчас опишу все как есть:
Я еще раз перечитал статью и не нашел, где я говорил, что хочу выжать максимум производительности.
Мы не используем Asio на самом нагруженном пути, лишь во вспомогательных задачах.
Вы правы!
К сожалению ещё не встречался с этим корутинами, обязательно обращу на них внимание :) Спасибо!
Думаю стоило добавить что мы ещё не используем C++20 :) Я точно помню что видел в asio поддержку boost::fiber, однако сейчас что-то не могу найти
https://think-async.com/Asio/asio-1.28.0/doc/asio/reference.html
В итоге на C++17 остаётся использовать только колбеки или std::future из коробки
Я имел ввиду Windows IO Conpletion Ports. asio называет этот функционал winiocp в исходниках, поэтому так и написал :) К сожалению я не уделял много внимания тому как работает asio на винде, знаю только то что asio::random_access_file будет вам доступен если вы на windows благодаря io completion ports. Упомянул я об этом только для того чтобы дать понять что эта фича библиотеки работает не на всех платформах.
Вопрос отличный!) Дело в том что если смотреть на внутренности asio то там в некоторых случаях так и происходит. Вы можете создать asio::thread_pool и использовать его только с одним диском. Да на самом деле создать поток, и запустить в нем asio::io_context сделает то же самое. И потом использовать thread_pool или io_context (библиотека называет их execution_contexts) вместе с нужным диском. В каждом контексте действительно есть своя очередь которая и будет разгребаться потоком/потоками.
Если говорить про размер asio, позволю себе отметить что standalone версия библиотеки представляет из себя header only библиотеку что, по моему скромному мнению, достаточно легковесно:)