0

背景参考...

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

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

我很好奇这个功能在同一个线程上与多个监听器的性能如何?

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

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

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

4

1 回答 1

0

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

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

如果没有内核对单次接受的支持,这种方法就无法工作。这是一个耻辱,因为它会简化一些实现模型,其中连接对象可以处理他们自己的接受,就像他们已经可以处理连接一样。

于 2020-03-29T13:31:20.897 回答