Zookeeper服務端線程分析(單機)

Zookeeper單機模式下啓動類爲ZooKeeperServerMain#runFromConfig, 調用過程可參考:http://naotu.baidu.com/file/2...

ZooKeeperServerMain會開啓一些線程協做處理不一樣請求:

NIOServerCxnFactory.SelectorThread

功能:java

  1. 處理隊列acceptedQueue(由AcceptThread入隊), 將裏面的SocketChannel註冊到selector中
  2. selector.select(), handleIO循環處理IO請求
  3. 當有請求時, 建立IOWorkRequest遞交給線程池workerPool處理
  4. 調用NIOServerCnxn#doIO, 封裝Request給線程ProcessThread處理, 入隊到ProcessThread的submittedRequests隊列

NIOServerCxnFactory.AcceptThread:

功能:循環處理接收客戶端請求, 並將接收到的SocketChannel放入SelectorThread的acceptedQueueapache

ProcessThread

功能:處理隊列submittedRequests
對應程序片斷:org.apache.zookeeper.server.PrepRequestProcessor.run(PrepRequestProcessor.java:134)線程

SyncThread

功能:請求處理鏈2
對應程序片斷: org.apache.zookeeper.server.SyncRequestProcessor.run(SyncRequestProcessor.java:109)code

SessionTracker

功能:待完善server

ConnnectionExpirer

功能:關閉超時的鏈接NIOServerCnxntoken

主要流程以下:

AcceptThread(接收鏈接請求SocketChannel)
-------> SelectorThread(從Socket讀取數據, 封裝成Request)
-------------> ProcessThread(處理Request) 隊列

持續完善中。。。get

相關文章
相關標籤/搜索