Zookeeper单机模式下启动类为ZooKeeperServerMain#runFromConfig, 调用过程可参考:http://naotu.baidu.com/file/2...
ZooKeeperServerMain会开启一些线程协作处理不同请求:
NIOServerCxnFactory.SelectorThread
功能:
- 处理队列acceptedQueue(由AcceptThread入队), 将里面的SocketChannel注册到selector中
- selector.select(), handleIO循环处理IO请求
- 当有请求时, 创建IOWorkRequest递交给线程池workerPool处理
- 调用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)
。。。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。