Илья Казаков @discodum
SWE @ YADRO
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Works in
- Date of birth
- Registered
- Activity
Specialization
Embedded Software Engineer, System Software Engineer
Middle
C++
Python
Git
Linux
OOP
Большое спасибо за ваш комментарий! Сейчас опишу все как есть:
Я еще раз перечитал статью и не нашел, где я говорил, что хочу выжать максимум производительности.
Мы не используем 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 библиотеку что, по моему скромному мнению, достаточно легковесно:)