Я работаю над инфраструктурой RPC, я хочу использовать дизайн с несколькими io_service, чтобы отделить io_objects
, выполняющий ввод-вывод (внешняя часть), от потоков, выполняющих работу RPC (внутренняя часть).
Внешний интерфейс должен быть однопоточным, а внутренний должен иметь пул потоков. Я обдумывал проект, позволяющий синхронизировать внешний и внутренний интерфейсы с помощью переменных условия. Однако кажется, что boost::thread
и boost::asio
не смешиваются, т. е. кажется, что поддержка условной переменной async_wait
недоступна. У меня есть открытый вопрос по этому поводу здесь.
Мне пришло в голову, что io_service::post()
можно использовать для синхронизации двух объектов io_service. Я прикрепил диаграмму ниже, я просто хочу знать, правильно ли я понимаю механизм post
, и будет ли это разумной реализацией.