Zookeeper单机模式下启动类为ZooKeeperServerMain#runFromConfig, 调用过程可参考:http://naotu.baidu.com/file/2...

ZooKeeperServerMain会开启一些线程协作处理不同请求:

NIOServerCxnFactory.SelectorThread

功能:

  1. 处理队列acceptedQueue(由AcceptThread入队), 将里面的SocketChannel注册到selector中
  2. selector.select(), handleIO循环处理IO请求
  3. 当有请求时, 创建IOWorkRequest递交给线程池workerPool处理
  4. 调用NIOServerCnxn#doIO, 封装Request给线程ProcessThread处理, 入队到ProcessThread的submittedRequests队列

NIOServerCxnFactory.AcceptThread:

功能:循环处理接收客户端请求, 并将接收到的SocketChannel放入SelectorThread的acceptedQueue

ProcessThread

功能:处理队列submittedRequests
对应程序片段:org.apache.zookeeper.server.PrepRequestProcessor.run(PrepRequestProcessor.java:134)

SyncThread

功能:请求处理链2
对应程序片段: org.apache.zookeeper.server.SyncRequestProcessor.run(SyncRequestProcessor.java:109)

SessionTracker

功能:待完善

ConnnectionExpirer

功能:关闭超时的连接NIOServerCnxn

主要流程如下:

AcceptThread(接收连接请求SocketChannel)
-------> SelectorThread(从Socket读取数据, 封装成Request)
-------------> ProcessThread(处理Request)

。。。


YYGP
25 声望11 粉丝

写BUG