設置高水位的方法爲設置zeromq配置項的通用方法(zmq_setsockopt),只是設置的變量根據傳入的標識值改變,利用socket_base_t類中的setsockopt方法來設置。socket_base_t方法中有從own_t類中繼承的option_t類型的成員變量。option_t類中有發送高水位及接收高水位的成員變量。
高水位的默認值設置爲1000,單位爲消息個數
一般來講,pubsub模式的高水位不用設置基本能夠滿足需求。
如果設置conflate(合併)字段,套接字會忽略高水位設置。
低水位設置要求:
低水位必須低於高水位
低水位的值不能爲很低的值如0,因爲填充消息隊列後只有消息被讀取後再次填充,所有沒有必要報酬後方進度。
低水位不能夠設置特別高,如(hwm-1)因爲消息被讀取一個後就會允許重新寫入,然後寫入一個後繼續休眠。效率很低。
如果高水位>1024*2,
低水位=高水位-1024,
否則:
低水位= 高水位的一半
非阻塞的類型(或組播)纔可以使用高水位
在一個發佈端多個訂閱端的情況下,發送性能會下降,水位限制的壓力會減小(因爲一個連接一個水位限制),內存使用率會增加。
各種套接字水位設置區別:
對於inproc類型的套接字,因爲不牽扯到IO線程,所以設置過程如下:
1.在設置bind類型套接字時,檢查是否有已經連接到該地址的連接,如果有則連接到綁定的套接字上。此時,將連接端的發送發送高水位和對端的接收高水位