Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多个boost io_服务,用于独立线程上的多个网卡_C++_Multithreading_Networking_Boost Asio - Fatal编程技术网

C++ 多个boost io_服务,用于独立线程上的多个网卡

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套接字绑定执行所有异步方法 独立处理每张卡上接收到的网络流量是个好主

我正在使用的电脑上有多个可用网卡。我希望每个网卡使用一个线程来实现更好的性能。我的应用程序将接收来自多个源的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的工作原理有错误的理解;一旦我读了材料,我就开始非常欣赏它。