1

所以这是我的场景:我从套接字读取并根据数据包上的内容将数据包放入适当的队列中。因此,如果我有 10 个队列,则将有 10 个 if-else-ifs 或 10 个 switch 语句案例来选择正确的队列。因此,最多可以进行 10 次比较。

另一种方法可能是要求广播器/服务器在 10 个不同的端口上广播,其中来自每个端口的馈送将包含用于单个特定队列的数据包,在我这端,我可以通过单独的线程监听每个套接字(或者我可以使用线程如果某些端口上的流量较少/不均匀,则池)。所以现在我不必选择数据包属于哪个队列,但是现在引入了conext switch的现象。

从这里开始,我的智慧和技术知识阻止了我走得更远。关于哪种方法会表现更好的任何知识?

4

2 回答 2

0

如果您使用的是 Windows,请检查 IO 完成端口 (IOCP),如果您使用的是 linux,请尝试 epoll。这些往往是两个系统上最有效的模型(在一般情况下)。Windows IOCP模型可以通过操作系统很好的绑定到线程池。

于 2012-12-03T06:09:21.667 回答
0

这是个人选择。如果流量足够或明显少于第一种方法更好。由于线程 限制,它是线程安全的。更容易维护。唯一的问题是 - 如果添加了额外的端口,那么您将不得不修改代码以获得额外的 if 子句。

但是在交通繁忙的情况下,这可能会更好。如果缓冲区已满,则会丢失较小的数据包。根据内核的数量可能会表现得更好,但如果执行得不好,可能会再次出现错误。

如果我是你,我会选择第一个。把事情简单化。

于 2012-12-03T06:26:33.080 回答