【发布时间】:2017-10-30 04:24:50
【问题描述】:
我正在使用的电脑上有多个可用的网卡。我想为每个网卡使用一个线程来获得更好的性能。我的应用程序将接收来自多个来源的 UDP 流量,我想跨这些网卡/线程进行分组。
考虑到这样的架构,如果使用 boost::asio 有多个 boost::asio::io_service 对象是否有意义,每个对象在分配给单个网卡的单独线程上运行?
基本上单个boost::asio::io_service 将在一个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
-------------------------------------------------------
【问题讨论】:
标签: c++ multithreading networking boost-asio