Мы прекрасно используем несколько акцепторов с одним io_service, как и планировалось.
Кроме того, мы распределяем работу между несколькими другими экземплярами io_service, используя одни и те же сокеты.просто отлично, как и задумано.
То, что может происходить в вашей кодовой базе, будет антипаттерном: если люди будут вызывать stop()
в вашем io_service
экземпляре, тогда да, это может привести к хаосу в любых других асинхронных операциях.поставленные в очередь в одном и том же экземпляре.
Таким образом, в целом идея состоит в том, чтобы избегать использования stop()
или аналогичных операций "времени жизни" для общего экземпляра io_service
.Единственное подходящее время для такого вызова было бы во время последовательности принудительного отключения , но действительно изящное отключение должно позволить всем активным соединениям завершить работу и ожидающая работа должна быть истощена, так что потоки, работающие io_service::run
, могли бы самопроизвольно завершитьсяв любом случае.
См. также: