资源......
即使是最好的零拷贝实现也必须有备用资源来将有效负载存储在几个主要独立的独立位置:
|<fatMessageNo1>| |...............|__________________________________________________________ RAM |...............|<fatMessageNo1>| |...............|...............|__________________Context().Queue[peerNo1] RAM |...............|...............|<fatMessageNo1>| |...............|...............|...............|________O/S.Buffers[L3/L2] RAM
当然,不要发送Mastodon大小的GB +消息。可以使用任何类型的off-RAM表示,并仅发送一个轻量级引用,以允许远程对等方访问这样一个巨大的野兽。
<子> 我更关心传输失败的问题:zeromq会做什么(它会尝试自动重传,它对我来说是透明的等等)。 RAM并不是那么重要 - 服务器可以拥有足够的内容,我们编写的服务并不是为了同时拥有大量的客户端。我所谈论的数据是非常相互关联的(我们有分子/原子信息和它们之间的联系)所以不可能发送它的大块并使用它 - 我们需要它全部)) C 保罗 25分钟前 子>
您可能已经意识到ZeroMQ正在Zen-of-Zero下工作,零保修也取而代之。
因此,ZeroMQ调度消息将 的 或 强> 无差错地“通过”交付,或根本不交付。这是一个非常痛苦的保护程序,因为您的代码将原子地仅接收完全受保护的内容,因此任何折磨垃圾都不会到达您的目标后处理。更高级别的软协议握手允许人们保持控制,从而可以从更高级别的抽象中缓解未交付的案例,因此,如果您的设计适应和部署条件允许, 的 一个人可以利用蛮力并发送任何东西 - [TB] -BLOBs 强> 如果其他人允许并且不介意的话,那就是自己有阻止本地和基础设施资源的风险(......但是从不在我的建议中:o))
[TB]
错误恢复自我修复 - 从丢失连接和类似的现实问题 - 在配置,资源和超时允许的情况下处理,因此在保持L1 / L2 / L3-ISO-OSI层问题时存在很多麻烦有效地隐藏用户应用程序程序员。