私は現在作業中のPCに複数のネットワークカードを用意しています。より良いパフォーマンスを達成するために、各ネットワークカードごとにスレッドを使用したいと思います。私のアプリケーションは、これらのネットワークカード/スレッド間でグループ化したい複数のソースからUDPトラフィックを受信します。マルチプルブーストio_service別のスレッド上にある複数のネットワークカード
このようなアーキテクチャを念頭に置いて、boost::asio
を複数のboost::asio::io_service
オブジェクトを使用すると意味がありますが、それぞれ個別のスレッドで1つのネットワークカードに割り当てられていますか?
実質的に単一のboost::asio::io_service
が、同じネットワークカード上のすべてのUDPソケットバインディングに対してすべての非同期メソッドを実行するために実行されます。
各カードで受け取ったネットワークトラフィックを個別に処理することをお勧めしますか?
NIC A ---> boost::io_service nic_a;
socket one(nic_a);
one.bind(nic_a, 0);
socket two(nic_a);
two.bind(nic_a);
// all sockets call async_read
-------------------------------------------------------
nic_a.run(); /// call this in Thread #a
-------------------------------------------------------
NIC B ---> boost::io_service nic_b;
socket three(nic_b);
three.bind(nic_b, 0);
socket four(nic_b);
four.bind(nic_b);
// all sockets call async_read
-------------------------------------------------------
nic_b.run(); /// call this in Thread #b
-------------------------------------------------------
トピックを勉強するのにしばらく時間を費やした後、私はそれが良い提案だと思う。私はASIOの仕組みを間違って理解していました。私がその資料を読んだ後は、とても感謝し始めました。 –