zookeeper源码分析(五)——网络通信组件ServerCnxnFactory

server/2024/12/23 2:45:03/

1.概述

Zookeeper作为一个服务器,需要与客户端进行网络通信,Zookeeper使用ServerCnxFactory管理与客户端的连接,其中有两个实现,一个是NIOServerCnxnFactory,使用java原生Nio实现,一个是NettyServerCnxnFactory,使用netty实现。

2.NIOServerCnxnFactory

使用的是java的NIO思路,1个accept Thread,该线程主要接收客户端的连接,并将其分配给selector thread; selector thread:该线程执行select(),由于在处理大量连接时,select()会成为性能瓶颈,因此启动多个selector thread,使用zookeeper.nio.numSelectorThreads来进行配置该类线程数,默认个数为核心数/2;worker thread:该线程执行基本的操作,可以理解为真正的处理线程,使用zookeeper.nio.numWorkerThreads来进行配置该线程的线程数,默认的线程数为:核心线程数*2;connection expiration thread:连接上的session过期,则关闭该连接。

上面是对这个NIOServerCnxnFactory类类上的注释说明

/*** NIOServerCnxnFactory implements a multi-threaded ServerCnxnFactory using* NIO non-blocking socket calls. Communication between threads is handled via* queues.**   - 1   accept thread, which accepts new connections and assigns to a*         selector thread*   - 1-N selector threads, each of which selects on 1/N of the connections.*         The reason the factory supports more than one selector thread is that*         with large numbers of connections, select() itself can become a*         performance bottleneck.*   - 0-M socket I/O worker threads, which perform basic socket reads and*         writes. If configured with 0 worker threads, the selector threads*         do the socket I/O directly.*   - 1   connection expiration thread, which closes idle connections; this is*         necessary to expire connections on which no session is established.** Typical (default) thread counts are: on a 32 core machine, 1 accept thread,* 1 connection expiration thread, 4 selector threads, and 64 worker threads.*/
public class NIOServerCnxnFactory extends ServerCnxnFactory 

2.1 AcceptThread

下面是AcceptThread线程的源码,我先把里面的实现方法给删除了。该线程的执行流程:run方法执行selector.select(),并进行调用doAccept()接收客户端连接,因此我们需要重点关注doAccept()方法

    private class AcceptThread extends AbstractSelectThread {private final ServerSocketChannel acceptSocket;private final SelectionKey acceptKey;private final RateLogger acceptErrorLogger = new RateLogger(LOG);private final Collection<SelectorThread> selectorThreads;private Iterator<SelectorThread> selectorIterator;private volatile boolean reconfiguring = false;public AcceptThread(ServerSocketChannel ss, InetSocketAddress addr, Set<SelectorThread> selectorThreads) throws IOException {}public void run() {}public void setReconfiguring() {reconfiguring = true;}private void select() {

http://www.ppmy.cn/server/35575.html

相关文章

【python】条件语句与循环语句

目录 一.条件语句 1.定义 2.条件语句格式 &#xff08;1&#xff09;if &#xff08;2&#xff09;if-else &#xff08;3&#xff09;elif功能 &#xff08;4&#xff09;if嵌套使用 3.猜拳游戏 二.循环语句 1. while循环 2.while嵌套 3.for循环 4.break和conti…

(论文阅读-优化器)Orca: A Modular Query Optimizer Architecture for Big Data

目录 摘要 一、简介 二、背景知识 2.1 大规模并行处理 2.2 SQL on Hadoop 三、Orca架构 四、查询优化 4.1 优化工作流 4.2 并行查询优化 五、Metadata Exchange 六、可行性 6.1 Minimal Repros 6.2 优化器准确性测试 七、实验 八、相关工作 8.1 查询优化基础 8…

AIGC-音频生产十大主流模型技术原理及优缺点

音频生成(Audio Generation)指的是利用机器学习和人工智能技术&#xff0c;从文本、语音或其他源自动生成音频的过程。 音频生成行业是AIGC技术主要渗透的领域之一。AI音频生成行业是指利用人工智能技术和算法来生成音频内容的领域。按照输入数据类型不同可以分为&#xff1a;根…

U3D游戏开发按钮相关

有一天一个小伙伴跟我说&#xff0c;对于按钮相关网络某些教程并不全面&#xff0c;我大致看了&#xff0c;几乎差不多&#xff0c;接下来就大致补充一点代码相关的知识点了&#xff0c;还有我日常开发常用的一些按钮相关代码知识。 目录 1.UGUI的普通按钮相关 2.UGUI的异型…

【Docker】★★★

docker 的网络模式 ●host模式&#xff1a;使用 --nethost 指定 容器与宿主机共享网络命名空间、ip和端口 ●container模式&#xff1a;使用 --netcontainer:NAME_or_ID 指定 新建的容器共享已有容器的网络命名空间、ip和端口 ●none模式&#xff1a;使用 --netnone 指定 不进行…

Vue09 五一前 组件通信

store组合式写法 count.ts组合式写法 import { reactive } from vue export const useLoveTalkStore defineStore(talk, () > {const talkList reactive(JSON.parse(localStorage.getItem(talkList) as string) || [])//getATalk函数相当于actionasync function getATal…

GreptimeDB 助力国家电网数字换流站打造稳定高效的时序数据底座

电网体系作为现代社会运行的支柱之一&#xff0c;为各行各业、千家万户提供了电能的基本支持。从家庭到企业&#xff0c;医院到学校&#xff0c;交通到通讯&#xff0c;电力电网的应用贯穿始终。近年来&#xff0c;特高压换流站成为国家电网的重点建设工程&#xff0c;“十四五…

【Linux】进程通信----管道通信

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;理解进程通信----管道通信 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;Lin…