Question

Essayer d'apprendre asio, et je suis les exemples du site.

Pourquoi io_service nécessaire et que fait-il exactement? Pourquoi dois-je l'envoyer à presque toutes les autres fonctions lors des opérations asynchrones, pourquoi ne peut-elle se « créer » après le premier « obligatoire ».

Était-ce utile?

La solution

Le io_service de Asio est le facilitateur pour le fonctionnement des fonctions asynchrones. Une fois qu'une opération asynchrone est prêt, il utilise l'un des fils de course de io_service pour vous rappeler. Si un tel fil existe, il utilise son propre filet intérieur pour vous appeler.

Considérer comme une file d'attente contenant des opérations. Il vous garantit que ces opérations, lorsqu'il est exécuté, ne le feront que sur les fils qui a appelé ses méthodes de run() ou run_once(), ou lorsqu'ils traitent avec les sockets et async IO, son filetage intérieur.

La raison pour laquelle vous devez passer à tout le monde est fondamentalement que quelqu'un doit attendre pour les opérations async être prêt, et comme indiqué dans sa propre documentation io_service est le lien de ASIO au service d'E / S du système d'exploitation de sorte qu'il fait abstraction de la plate-forme propres notifiants, comme async kqueue, /dev/pool/, epoll et les méthodes d'opérer sur ceux-ci, tels que select().

Principalement je finis à l'aide io_service pour démultiplexer callbacks de plusieurs parties du système, et assurez-vous qu'ils fonctionnent sur le même fil, ce qui élimine la nécessité de verrouillage explicite, puisque les opérations sont sérialisés. Il est un langage très puissant pour les applications asynchrones.

Vous pouvez jeter un oeil à la page

scroll top