【发布时间】:2023-06-12 23:45:01
【问题描述】:
我一直在阅读大量有关 udp 的阻塞与非阻塞套接字的内容,但我很难理解其中一个的优点。互联网上绝大多数的 cmets 似乎表明非阻塞更好,但对于它们在哪些情况下会更好,并且我没有找到关于何时首选阻塞的参考资料。我对这个问题的希望是社区可以对这个主题有所了解。
我自己的问题集的一些背景知识,以便可以将答案具体应用于问题的一般性质。我有一个我正在编写的 udp 服务器,它将在本地 lan 上有 40 个连接,因此将有恒定的数据流流入。数据速率平均约为 250MB/s,平均峰值为 500+Mb/s数据报大小约为 1400 字节。数据报的处理是轻量级的,但由于大量的 msgs 效率和性能是高优先级,以防止丢包。
由于我无法真正找到与此特定问题集类似的任何上下文信息,因此我不得不根据我收集到的有关阻塞与非阻塞的信息进行一些猜测。我将用我目前的假设来结束这个,然后将它开放给你的输入。基本上,由于这将是每个连接上几乎恒定的数据包流,我认为阻塞套接字会更可取,因为任何 recv 函数实际花费阻塞的时间与使用事件相比非常非常少基于模型的模型在异步模式下会有大量的触发器。我觉得我真正的问题集很可能是我计划用来从套接字读取的 40 个线程的优先级管理......确保每个线程都获得他们的 CPU 时间份额。我的方法和想法可能不正确,所以我希望并且如果社区可以帮助阐明这个问题,我将非常感激。
~编辑~
虽然我关心线程设计将如何影响/集成阻塞/非阻塞问题。我真的很关心从我的问题集的角度应该如何看待阻塞/非阻塞。如果线程确实成为一个问题,我可以使用线程池解决方案。
~edit2~
首先,我想说的是到目前为止的回复。你们中的一些人提到具有这么多套接字的单线程/套接字模型可能是一个坏主意,我承认我自己对解决方案是试探性的。然而,在 nikolai 的回复中的一个链接中,作者讨论了单线程/套接字模型并链接到一篇非常有趣的论文,我认为我会链接到这里,因为它消除了我持有的关于线程与事件的许多神话基于模型:why events are a bad idea
【问题讨论】:
-
你在做netflow收集,不是吗? ;