1 回答

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