C++ 多个boost io_服务,用于独立线程上的多个网卡
我正在使用的电脑上有多个可用网卡。我希望每个网卡使用一个线程来实现更好的性能。我的应用程序将接收来自多个源的UDP通信,我希望通过这些网卡/线程对这些源进行分组 考虑到这样的体系结构,如果使用多个C++ 多个boost io_服务,用于独立线程上的多个网卡,c++,multithreading,networking,boost-asio,C++,Multithreading,Networking,Boost Asio,我正在使用的电脑上有多个可用网卡。我希望每个网卡使用一个线程来实现更好的性能。我的应用程序将接收来自多个源的UDP通信,我希望通过这些网卡/线程对这些源进行分组 考虑到这样的体系结构,如果使用多个boost::asio::io\u服务对象,每个对象都在分配给单个网卡的单独线程上运行,那么使用boost::asio是否有意义 本质上,一个单一的boost::asio::io_服务将在一个thead中运行,以对同一网卡上的所有UDP套接字绑定执行所有异步方法 独立处理每张卡上接收到的网络流量是个好主
boost::asio::io\u服务对象,每个对象都在分配给单个网卡的单独线程上运行,那么使用boost::asio
是否有意义
本质上,一个单一的boost::asio::io_服务将在一个thead中运行,以对同一网卡上的所有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
-------------------------------------------------------
与其在每对网卡的一个线程中使用io\U服务
,不如在asio::io\U服务::strand
中包装套接字,并在线程池中使用单个io\U服务
,请参阅:和
最容易将套接字
和串
放在一个类中,如本例所示:。有一些代码支持asio
UDP套接字和streams
在花了一些时间研究这个主题之后,我认为这是一个很好的建议。我对ASIO的工作原理有错误的理解;一旦我读了材料,我就开始非常欣赏它。