Zookeeper服务端线程分析(单机)

本文详细解析了Zookeeper在单机模式下启动类ZooKeeperServerMain的运行流程,包括线程间的协作机制,如NIOServerCxnFactory.SelectorThread处理IO请求,NIOServerCxnFactory.AcceptThread接收客户端请求,以及ProcessThread处理请求队列等关键环节。
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)

持续完善中。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值