单线程设计或多线程设计

Unithreaded design or multithreaded design?

本文关键字:多线程 单线程      更新时间:2023-10-16

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

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

从这里开始,我的智慧和技术知识阻止了我走得更远。对哪种方法效果更好有什么看法吗?

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

但在交通繁忙的情况下,这可能会更好。如果缓冲区已满,较小的数据包将丢失。根据内核数量,可能会表现得更好,但如果执行不好,可能会有问题。

如果我是你,我会继续第一个。保持简单。

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