所以我对套接字(在c中)有一些(可以说是)乐趣,然后我遇到了异步接收的问题。
如上所述here,select
和poll
会对套接字进行线性搜索,但搜索效果不佳。然后我想,知道套接字的应用程序特定行为,我能做得更好吗?
例如,如果
。然后我可以实现一个以最大概率的顺序轮询套接字的算法。
问题是,这是一次疯狂的尝试吗?图书馆poll
/ select
是否有一些我无法从用户空间中获胜的优势?
编辑:澄清,我不是要复制poll
和select
的语义,我只想找到一种至少找到的工作方式< em> 套接字已准备好接收。
此外,像epoll
这样的东西存在,所有这些,我认为最有可能是优越的,但我想首先寻找任何可能的替代方案。
答案 0 :(得分:3)
图书馆
poll
/select
是否有一些我无法从用户空间中击败的优势?
C库也在用户空间中运行,但它的select()
和poll()
函数几乎肯定是系统调用的包装器(但不同系统的细节因素而异)。他们包装单个系统调用(事实上他们这样做)确实比任何涉及多个系统调用的方案具有明显的优势,例如我想你需要的那种方法心神。系统调用开销很高。
但是,如果您想要复制select()
和poll()
的语义,那么所有这些都可能没有实际意义:具体来说,当它们返回时,它们会提供有关所有<的信息/ em>准备好的文件。为了做到这一点,他们必须测试或以某种方式观察每个指定的文件,因此,必须进行假设的替换。由于您无论如何都需要扫描每个文件,因此扫描它们的顺序并不重要;线性扫描可能是一个理想的选择,因为它的开销非常低。