我有我的工作在PC上的多個網卡。我想每個網卡使用一個線程來獲得更好的性能。我的應用程序將接收來自多個來源的UDP流量,我想通過這些網卡/線程進行分組。多個提升io_service在單獨的線程上的多個網卡
考慮到這樣的體系結構,如果使用boost::asio
確實有多個boost::asio::io_service
對象,每個對象都運行在分配給單個網卡的單獨線程中?
基本上,一個單一的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的工作原理有錯誤的理解;一旦我閱讀材料,我開始非常欣賞它。 –