zookeeper watch的定義如下:watch事件是一次性觸發器,當watch監視的資料發生變化時,通知設定了該watch的client,即watcher。
需要注意三點:
1.一次性觸發器
client在乙個節點上設定watch,隨後節點內容改變,client將獲取事件。當節點內容再次改變,client不會獲取這個事件,除非它又執行了一次讀操作並設定watch
2.傳送至client,watch事件延遲
watch事件非同步傳送至觀察者。比如說client執行一次寫操作,節點資料內容發生變化,操作返回後,而watch事件可能還在發往client的路上。這種情況下,zookeeper提供有序保證:client不會得知資料變化,直到它獲取watch事件。網路延遲或其他因素可能導致不同client在不同時刻獲取watch事件和操作返回值。
3.設定watch的資料內容
涉及到節點改變的不同方式。比方說zookeeper維護兩個watch列表:節點的資料watch和子節點watch。getdata()和exists()設定了內容watch,getchildren()設定了子節點watch,操作返回的資料型別不同,前者是節點的內容,後者是節點的子節點列表。setdata()觸發內容watch,create()觸發當前節點的"內容watch"和其父節點的"子節點watch",delete()同時觸發"內容watch"和"子節點watch"(其子節點被全部刪除),以及其父節點的"子節點watch"。說白了,對當前節點的操作,要考慮到對其父節點與子節點的影響。
watch在客戶端所連線的服務端本地維護。watch的設定、維護、分發操作都很輕量級。當客戶端連線到新的服務端,watch將被任一會話事件觸發。與服務端斷開連線時,不能獲取watch事件。客戶端重連後,之前註冊的watch將被重新註冊並在需要時觸發。通常這一切透明地發生,使用者不會察覺到。有一種情況watch可能丟失:之前對乙個尚未建立的節點的設定了exists watch,如果斷開期間該節點被建立或刪除,那麼此watch將丟失。
對於watch,zookeeper提供以下保證:
1.watch對於其他事件、watch、非同步響應是有序的。zookeeper client library保證有序分發
2.客戶端監視乙個節點,總是先獲取watch事件,再發現節點的資料變化。
3.watch事件的順序對應於zookeeper服務所見的資料更新的順序。
關於watch要記住的是:
1.watch是一次性觸發的,如果獲取乙個watch事件並希望得到新變化的通知,需要重新設定watch
2.watch是一次性觸發的並且在獲取watch事件和設定新watch事件之間有延遲,所以不能可靠的觀察到節點的每一次變化。要認識到這一點。
3.watch object只觸發一次,比如,乙個watch object被註冊到同乙個節點的getdata()和exists(),節點被刪除,僅對應於exists()的watch ojbect被呼叫
4.若與服務端斷開連線,直到重連後才能獲取watch事件。
pytorch fine tuning注意事項
前言 這篇文章算是論壇pytorch forums關於引數初始化和finetune的總結,也是我在寫 中用的算是 最佳實踐 吧。最後希望大家沒事多逛逛論壇,有很多高質量的回答。引數初始化 引數的初始化其實就是對引數賦值。而我們需要學習的引數其實都是variable,它其實是對tensor的封裝,同時...
PHP Open Flash Chart注意事項
1.在html頁面必須src正確的swfobject.js的路徑 可以用firebug檢視絕對路徑是否正確 2.在html頁面必須指定正確的swfobject使用時的open flash chart.swf的位置 可以用firebug檢視絕對路徑是否正確 3.在html頁面必須制定正確的data f...
Spring Hibernate整合注意事項
1 spring jar包 需要額外加入 commons pool 和commons dbcp 若包含 spring 自帶的測試,還需要引入 spring test 2 spring beans.xml 如果使用了 spring annotation 則需要加入以下兩項配置 前提是已經匯入了bean...