Die Boost C++ Bibliotheken

Kapitel 32. Boost.Asio

Inhaltsverzeichnis

In diesem Kapitel lernen Sie die Bibliothek Boost.Asio kennen. Asio steht für asynchrones Input/Output. Mit dieser Bibliothek ist es möglich, Daten asynchron zu verarbeiten. Asynchron bedeutet, dass Operationen angestoßen werden, ohne auf ihren Abschluss zu warten. Stattdessen informiert Boost.Asio ein Programm, wenn eine Operation abgeschlossen wurde. Der Vorteil ist, dass in der Zwischenzeit andere Operationen ausgeführt werden können.

Mit Boost.Thread existiert eine andere Boost-Bibliothek, die es ermöglicht, Operationen gleichzeitig auszuführen. Der entscheidende Unterschied zwischen Boost.Thread und Boost.Asio ist, dass Sie mit Boost.Thread auf Ressourcen innerhalb eines Programms und mit Boost.Asio auf Ressourcen außerhalb eines Programms zugreifen. Haben Sie beispielsweise eine Funktion entwickelt, die eine zeitaufwändige Berechnung durchführen soll, können Sie diese in einen Thread packen und sie auf einem anderen Prozessorkern ausführen. Über Threads greifen Sie auf Prozessorkerne zu, die Ihren Code ausführen. Prozessorkerne stellen aus Sicht Ihres Programms interne Ressourcen dar. Möchten Sie auf Ressourcen zugreifen, die sich außerhalb Ihres Programms befinden, verwenden Sie Boost.Asio.

Ein Beispiel für externe Ressourcen sind Netzwerkverbindungen. Wenn Daten gesendet oder empfangen werden sollen, wird der Netzwerkkarte mitgeteilt, dass sie entsprechende Operationen ausführen soll. Zum Versand wird ihr ein Zeiger auf einen Speicherbereich übergeben, in dem die zu sendenden Daten liegen. Zum Empfang wird ihr ebenfalls ein Zeiger auf einen Speicherbereich übergeben, in den die zu empfangenen Daten abgelegt werden sollen. Da die Netzwerkkarte aus Sicht Ihres Programms eine externe Ressource ist, kann sie die entsprechenden Operationen unabhängig ausführen. Die Netzwerkkarte benötigt zur Ausführung der Operationen Zeit – Zeit, die Sie in Ihrem Programm nutzen können, um andere Operationen auszuführen. Boost.Asio ermöglicht es Ihnen, Geräte effizienter zu nutzen, indem Sie von ihrer Eigenschaft profitieren, parallel zum Prozessor Operationen ausführen zu können.

Der Versand und Empfang von Daten über Netzwerkverbindungen ist in Boost.Asio als asynchrone Operation implementiert. Eine asynchrone Operation ist vergleichbar mit einer Funktion, die nach einem Aufruf zurückkehrt, ohne ein Ergebnis zurückgeben zu können. Das Ergebnis wird später nachgereicht.

Eine asynchrone Operation wird in einem ersten Schritt initiiert. Ist die asynchrone Operation beendet, wird das Programm in einem zweiten Schritt über den Abschluss informiert. Die Aufteilung in Initiierung und Benachrichtigung über ihren Abschluss macht es möglich, auf externe Ressourcen ohne blockierende Funktionen zuzugreifen.