套接字库轮询与自定义轮询

时间:2017-05-05 18:16:21

标签: algorithm sockets

所以我对套接字(在c中)有一些(可以说是)乐趣,然后我遇到了异步接收的问题。

如上所述hereselectpoll会对套接字进行线性搜索,但搜索效果不佳。然后我想,知道套接字的应用程序特定行为,我能做得更好吗?

例如,如果

  • X n :套接字X的第n个数据报的到达时间(为简单起见假设时间是离散的)
  • Pr(X n = x n | X n-1 = x n-1 ,X n-2 = x n-2 ...):给出X n = x n 的概率之前的到达时间
通过统计或假设或任何其他方式知道

。然后我可以实现一个以最大概率的顺序轮询套接字的算法。

问题是,这是一次疯狂的尝试吗?图书馆poll / select是否有一些我无法从用户空间中获胜的优势?

编辑:澄清,我不是要复制pollselect的语义,我只想找到一种至少找到的工作方式< em> 套接字已准备好接收。
此外,像epoll这样的东西存在,所有这些,我认为最有可能是优越的,但我想首先寻找任何可能的替代方案。

1 个答案:

答案 0 :(得分:3)

  

图书馆poll / select是否有一些我无法从用户空间中击败的优势?

C库也在用户空间中运行,但它的select()poll()函数几乎肯定是系统调用的包装器(但不同系统的细节因素而异)。他们包装单个系统调用(事实上他们这样做)确实比任何涉及多个系统调用的方案具有明显的优势,例如我想你需要的那种方法心神。系统调用开销很高。

但是,如果您想要复制select()poll()的语义,那么所有这些都可能没有实际意义:具体来说,当它们返回时,它们会提供有关所有<的信息/ em>准备好的文件。为了做到这一点,他们必须测试或以某种方式观察每个指定的文件,因此,必须进行假设的替换。由于您无论如何都需要扫描每个文件,因此扫描它们的顺序并不重要;线性扫描可能是一个理想的选择,因为它的开销非常低。