考虑每秒数千次请求的缓存应用程序,其中客户端使用整数索引请求对象,服务器将对象发回给它。(仅Linux)
对于UDP协议来说,什么会更快:
(适用于双方、服务器或客户端)
缺点:
每个数据包的
- many memcpy()s will be needed to assemble packet with multiple replies. If a get() request returns to the client 16 byte objects, a single packet of 65535 bytes would have to memcpy() about 4000 objects before issuing sendto() system call. _memcpy() is costly_
- An UDP packet of 65000 bytes will generate about 43 udp packet headers since the packet will be transmitted in fragmetns, due to 1500 default MTU size. _not a big overhead_
每个数据包的
上保存CPU寄存器。
这两种方法都有各自的缺点,目前还不清楚哪种解决方案更好,然而,千兆以太网的时钟运行在1 GHz,而处理器是3 GHz,内存总线也比以太网接口的双绞线宽得多。因此,每个数据包多个回复将是更好的选择,因为额外的memcpy()将减少网络流量,对吗?
现在,如果我们使用TCP而不是UDP:
每个包的
每个包的
结论:
这个特定应用程序的
发送请求。
非常感谢您对协议选择的意见和经验。
注意:让我们把可靠性问题放在一边,假设我们的网络是无错误的,如果你正确地连接它们,这在大多数情况下都是正确的,如果发生错误,这肯定不是正常的。
发布于 2012-02-10 22:56:13
这里有一些不准确的陈述,并且稍微改变了画面:
https://stackoverflow.com/questions/9235592
复制相似问题