我已經看到了這樣的建議,在多個地方,如:什麼時候單個TCP通道未在Azure的服務總線,Redis的緩存足夠了,排隊等
多工廠:所有客戶端(發送者除到接收器)由同一個工廠共享一個TCP連接。最大消息吞吐量受可通過此TCP連接的操作數量的限制。單個工廠可以獲得的吞吐量隨着TCP往返時間和消息大小而變化很大。要獲得更高的吞吐率,您應該使用多個消息傳遞工廠。
你可以找到對Redis,RabbitMQ等的類似推薦。我的問題是,如何一個TCP通道可以用盡?我相信單個TCP通道沒有帶寬限制。
那麼,爲什麼人們建議擁有多個高通量通道?是因爲:
在情況下,客戶端應用程序發送許多小的消息到單個TCP信道,每一個操作將在TCP套接字的鎖,然後發送該消息。它可能導致鎖爭用。而如果我們使用多個tcp通道,這個爭用可以在一定程度上得到解決。
如果在tcp通道上發送大消息,可能需要一段時間才能序列化/反序列化並將其推送到通道。它可以阻止其他小消息。
這些是真正的原因(或者這些假設是錯誤的,真正的原因是什麼)?