1

我在很多地方都看到过这种推荐,比如:

多个工厂:由同一工厂创建的所有客户端(发送方和接收方)共享一个 TCP 连接。最大消息吞吐量受限于可以通过此 TCP 连接的操作数。单个工厂可以获得的吞吐量随 TCP 往返时间和消息大小的不同而有很大差异。要获得更高的吞吐率,您应该使用多个消息传递工厂。

您可以找到 Redis、RabbitMQ 等的类似建议。我的问题是,一个 TCP 通道怎么会耗尽?我相信单个 TCP 通道没有带宽限制。

那么,为什么人们建议使用多个通道来实现高吞吐量?是不是因为:

  1. 如果客户端应用程序向单个 tcp 通道发送大量小消息,则每个操作都会锁定 tcp 套接字然后发送消息。它可能导致锁定争用。如果我们使用多个 tcp 通道,这种争用可以在一定程度上得到解决。

  2. 如果在 tcp 通道上发送大消息,则序列化/反序列化并将其推送到通道可能需要一些时间。它可以阻止其他小消息。

这些是实际原因吗(或者如果这些假设是错误的,真正的原因是什么)?

4

1 回答 1

1

基本上,你是对的。客户端 1 --> TCP/IP ---> 服务器(做一些处理) 现在,客户端 2 想向服务器发送请求?客户端 2 需要等待客户端 1 完成(我假设这里的上下文是关于阻塞 I/O)。因此,如果您有多个 TPC 连接,客户端 2 可以与客户端 1 同时发送请求 ==> 增加吞吐量。但是,保持更活跃的连接是有代价的。您应该确保您有“足够的”连接来满足您的请求,并尽量减少“空闲”连接的数量。

于 2016-08-31T10:46:18.993 回答