Est-il possible d'utiliser des threads séparés pour lire et écrire avec Boost.Asio?
-
11-09-2019 - |
Question
Selon le Boost Documentation , plusieurs threads appellent io_service::run()
met en place un pool de threads que le service IO peut utiliser pour effectuer des tâches asynchrones. Il stipule explicitement que tous les fils qui se sont joints à la piscine sont considérés comme équivalents.
Est-ce que cela implique qu'il est impossible d'avoir un thread séparé pour la lecture d'une prise et un autre pour écrire? S'il est possible, comment pourrais-je mettre cela?
La solution
Tout thread qui appelle io_service::run()
peut être utilisé pour appeler des gestionnaires asynchrones. Mais vous ne pouvez pas spécifier précisément quel thread exécute quel type d'opération. Par exemple, si vous appelez io_service :: run () dans 2 fils de fond, et vous deviez appeler socket::async_send
et socket::async_receive
dans un fil conducteur, vos gestionnaires seront exécutés dans un thread d'arrière-plan qui est actuellement disponible. Alors oui, toutes les discussions sont essentiellement considérés comme équivalents, et peuvent être utilisés pour toute opération asynchrone.