zoukankan      html  css  js  c++  java
  • ZeroMQ高水位标记(high-water mark,HWM)

    ZMQ使用高水位标记(HWM)的概念来定义其内部管道的容量。每个连接都有其发送或接受数据的管道和对应的HWM。对于管道和HWM,不同的socket有不同的行为:

    • PUB,PUSH只有发送管道(buffer?)
    • SUB,PULL,REP,REQ只有接受管道
    • DEALER, ROUTER, PAIR两者都有

    在ZMQ2.x版本中,HWM默认是没有限制的。在3.x版本中,HWM默认值为1000。在新版本中HWM宏已经被替换:

    #   define ZMQ_SNDHWM ZMQ_HWM
    #   define ZMQ_RCVHWM ZMQ_HWM
    

    可以通过setsocketopt函数来设置HWM的值。

    当数据填满管道,达到HWM时,不同的socket也有不同的表现:

    • PUB 和 ROUTER 会丢弃数据
    • 其他的socket会阻塞
    • 这里的socket作为发送端
    • 如果连接没有建立,在填满本地缓存后,阻塞或丢弃数据
    • 如果建立了连接,在填满本地和对端缓存后,阻塞或丢弃数据

    最后,HWMs并不准确; 默认情况下,最多可以收到1000条消息,实际的缓冲区大小可能要低得多(少至一半),这取决于libzmq实现其队列的方式。

  • 相关阅读:
    愚公移山
    唐雎不辱使命
    渡易水歌
    论语
    智子疑邻
    学弈
    SQL Merge 语法 单表查询
    大道之行也
    Java开发人员最常犯的10个错误
    模拟Spring手撕一个简单的IOC容器
  • 原文地址:https://www.cnblogs.com/kohlrabi/p/7306587.html
Copyright © 2011-2022 走看看