【问题标题】:SO_REUSEPORT and multiple listeners in the same threadSO_REUSEPORT 和同一线程中的多个侦听器
【发布时间】:2020-03-26 21:48:09
【问题描述】:

背景参考...

https://lwn.net/Articles/542629/

https://blog.n0p.me/2018/02/2018-02-20-portsharding/

我很好奇这个功能在同一个线程上使用多个监听器的效果如何?

例如,假设我的服务器强制限制 100 个连接。使用像 ASIO 这样的框架,它是否可以简单地创建一个包含 100 个连接对象的池,每个对象都异步侦听,直到它接受一个连接?这真的更像是拥有 100 个单连接服务器。

同一线程上的多个侦听器的性能是否与单个侦听器相同或更差?

[edit] 我认为监听积压可能是个问题。即使 backlog 设置为一个,第二个连接也可以在第一个连接被接受后立即排队,并且关闭端口可能会 RST 连接而不是将其迁移到另一个侦听 backlog。

【问题讨论】:

    标签: linux boost-asio asio so-reuseport


    【解决方案1】:

    好的,我写了一个测试程序看看会发生什么,acceptor backlog queue肯定是个问题。

    如果有 100 个接受器和 100 个连接器,大约 60% 的连接器将分配给一个唯一的接受器,而其余的最终会出现在这些相同接受器的积压中(深度设置为 1)。如果接受者在初始接受后立即关闭端口,则百分比随机攀升,其余部分被拒绝。

    如果没有内核对单次接收的支持,这种方法是行不通的。很遗憾,因为它会简化一些实现模型,其中连接对象可以处理自己的接受,就像他们已经可以处理连接一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多