1 回答

TA貢獻1815條經驗 獲得超13個贊
問:“這樣的實施可能會出現什么問題?”
.poll()
由于僅使用&.recv()
方法的阻塞形式,這種實現很容易出現死鎖并失敗在多個對等點連接到實現循環傳入/傳出流量映射的接入點的情況下,這種實現的自我防御能力不夠
.recv()
這種實現方式是非常錯誤的,因為在這種情況下,只調用一個單獨的代碼.send_multipart()
是非常錯誤的,在這種情況下,會發出驚人的警告,需要進行多部分消息處理ipc://
Transport Class 很容易隱藏與操作系統相關的用戶級代碼限制(由操作系統對路徑名的格式和長度以及對 R/W/X 的有效用戶權限進行設置)ipc://
對于 O/S 服務尚未創建目標地址的情況,傳輸類.connect()
方法的使用取決于順序(.bind()
需要首先成功)最后但并非最不重要的一點是,任何
.bind()
對同一ipc://
傳輸類目標的下一次嘗試都會默默地破壞您ROUTER
對消息傳遞/信令平面基礎設施的預期訪問,并且您的實現已經花費了零努力來自我保護和自我診斷錯誤,這些錯誤可能會默默地發生出現在“幕后”
Zeromq 不應該自動處理死鎖嗎?我嘗試使用zeromq指南mspoller中給出的示例如果我不能同時使用.poll()和recv(),我應該如何使用ZMQ Poller結構?– hao123
不,
ZeroMQ zen-of-zero 注重性能+低延遲,因此請考慮將預防阻塞的所有應有注意都掌握在您自己的手中(根據需要和需要的地方,核心庫永遠不會比實現幾乎線性可擴展性能的目標所需的)。
不,
自由使用.poll()
- 和 -.recv()
方法,但完成它以適應非阻塞方式 -.poll( 0 )
并添加主動檢測+多部分消息的處理(再次,最好以非阻塞方式,使用zmq.NOBLOCK
選項標志,其中合適的 )。自阻塞會使代碼失控。
添加回答
舉報