- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我对套接字(在 c 中)有一些(可以说)的乐趣,然后我遇到了异步接收的问题。
如前所述here 、select
和 poll
对套接字进行线性搜索,但扩展性不是很好。然后我想,我可以做得更好,了解套接字的特定于应用程序的行为吗?
例如,如果
通过统计或假设或其他方式已知。然后我可以实现一种算法,以最大概率的顺序轮询套接字。
问题是,这是疯狂的尝试吗? poll
/select
库是否有一些我无法从用户空间击败的优势?
编辑: 澄清一下,我并不是要复制 poll
和 select
的语义,我只是想要一种工作方式找到至少 一个 准备接收的套接字。
此外,存在诸如 epoll
之类的东西,我认为这很可能更好,但我想先寻找任何可能的替代方案。
最佳答案
Does the library
poll
/select
have some advantage that I can't beat from user space?
C 库也在用户空间中运行,但它的 select()
和 poll()
函数几乎可以肯定是系统调用的包装器(但细节因系统而异)系统)。他们包装单个系统调用(实际上他们这样做了)确实给了他们一个明显的优势,超过任何涉及多个系统调用的方案,比如我想你在头脑。系统调用的开销很高。
所有这些可能都没有实际意义,但是,如果您想要复制 select()
和 poll()
的语义:具体来说,当它们返回时, 它们提供有关所有 已准备好文件的信息。为此,他们必须测试或以某种方式监视每个 指定文件,因此,您的假设替代品也必须如此。由于无论如何您都需要扫描每个文件,因此扫描它们的顺序并不重要;线性扫描可能是一个理想的选择,因为它的开销非常低。
关于algorithm - 套接字库轮询与自定义轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43811422/
我是一名优秀的程序员,十分优秀!