单线程设计或多线程设计
Unithreaded design or multithreaded design?
这是我的方案:我从套接字读取,并根据数据包上的内容将数据包放入适当的队列中。因此,如果我有 10 个队列,将有 10 个 if- else -ifs 或 10 个 switch 语句案例来选择正确的队列。因此,最多可以有 10 个比较。
另一种方法是要求广播公司/服务器在 10 个不同的端口上广播,其中来自每个端口的馈送将具有单个特定队列的数据包,在我的这边,我可以通过 saperate 线程收听每个套接字(或者,如果某些端口上的流量较少/不统一,我可以使用线程池)。所以现在我不必选择数据包属于哪个队列,但现在引入了 conext 切换的现象。
从这里开始,我的智慧和技术知识阻止了我走得更远。对哪种方法效果更好有什么看法吗?
这是个人选择。如果流量足够或低于明显,则第一种方法更好。由于线程限制,它是线程安全的。更易于维护。唯一的问题是 - 如果添加了额外的端口,那么您将不得不修改额外的 if 子句的代码。
但在交通繁忙的情况下,这可能会更好。如果缓冲区已满,较小的数据包将丢失。根据内核数量,可能会表现得更好,但如果执行不好,可能会有问题。
如果我是你,我会继续第一个。保持简单。
如果您使用的是 Windows,请查看 IO 完成端口 (IOCP),如果 linux 尝试 epoll。这些往往是两个系统上最有效的模型(在一般情况下)。Windows IOCP模型可以通过操作系统很好地绑定到线程池。
相关文章:
- OpenMP:共享同一算法的单线程和多线程实现
- 重写多线程事件驱动的C 程序以使用单线程Boost :: Asio
- C++多线程操作比单线程慢
- 多线程和单线程代码维护
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- C++多线程性能比单线程代码慢
- 从单线程到多线程图像处理
- 多线程功能性能比单线螺纹差
- 单线程设计或多线程设计
- 与单线程相比,c++/java的多线程性能结果参差不齐
- C++中的单线程多线程代码
- C++线程-多线程比单线程慢
- 多线程与单线程快速排序花费相同的时间
- 为什么使用 pthread 的 Ubuntu 中的单线程比多线程快
- 为什么具有多线程的for循环的性能不如单线程
- 重构多线程方案的单线程 GUI 代码
- C++11 多线程比单线程慢
- 单线程和多线程代码需要同时花费时间
- GDB调试多线程,单线程无法预测执行
- 提振.Asio复合操作在单线程和多线程进程