12. Boost-Asio-Tutorial --- Multithread-Ausführung

Die bisher besprochenen Beispiele wurden alle in einem einzigen Thread ausgeführt. In realen Anwendungen möchten Sie jedoch alle CPU-Kerne in Ihrer Boost.Asio-Anwendung voll ausnutzen. Daher sollten wir lernen, wie man mit Multithreading in Boost.Asio arbeitet. Halten wir es wie immer einfach und klar:

namespace io = boost::asio;
using tcp = io::ip::tcp;
using error_code = boost::system::error_code;

Es gibt zwei gängige Methoden zur Implementierung von Multithreading. In dieser Lektion lernen wir die einfachste Methode kennen. Sehen wir uns den Single-Threaded-Ansatz noch einmal an:

io::io_context io_context;
// Prepare things
io_context.run();

Der einfachste Weg, in einen Multithread-Ansatz einzusteigen, besteht darin, die Memberfunktion io_context::run mit demselben io_context-Objekt in mehreren Threads auszuführen.

Beachten Sie, dass Sie das Makro BOOST_ASIO_NO_DEPRECATED definieren sollten, bevor Sie die Header-Datei Boost.Asio einbinden. Dadurch werden Sie das veraltete Boost.Asio-Zeug los. Im folgenden Beispiel müssen wir die veraltete Überladung io::io_context::run entfernen, die das Argument error_code als Referenz akzeptiert. In diesem Fall generiert diese Überladung einen Fehler, wenn der Thread erstellt wird, da der Zeiger io::io_context::run in diesem Fall mehrdeutig ist.

#define BOOST_ASIO_NO_DEPRECATED
#include <boost/asio.hpp>
// ...

io::io_context io_context;
// Prepare things
std::vector<std::thread>

おすすめ

転載: blog.csdn.net/Knowledgebase/article/details/132984028