Vertx

作者: 沧行 | 来源:发表于2016-11-20 17:37 被阅读0次

背景

  • 对于vertx框架,最基础的组件就是vertx,几乎所有功能都是通过vertx实现。
  • vertx聚合了网络通信组件需要的eventloop和线程池。
  • 所有verticle共享1个vertx实例。
vertx.png

VertxImpl核心成员

  • DeploymentManager deploymentManager
  • vertx部署verticle通过该成员实现。
this.deploymentManager = new DeploymentManager(this);
  • BlockedThreadChecker checker
  • 线程阻塞检查器,实现原理是执行一个定时任务,每次遍历所有VertxThread类型线程,如果线程执行时间超过了WarningExceptionTime,则记录日志。
checker = new BlockedThreadChecker(options.getBlockedThreadCheckInterval(), options.getWarningExceptionTime());
  • ThreadFactory eventLoopThreadFactory
  • eventloop线程创建工厂类,eventloop中的线程类型为VertxThread。
eventLoopThreadFactory = new VertxThreadFactory("vert.x-eventloop-thread-", checker, false, options.getMaxEventLoopExecuteTime());
  • NioEventLoopGroup acceptorEventLoopGroup
  • 请求接收eventloopGroup,负责accept连接,并把创建好的连接注册到eventLoopGroup中的某个eventloop上。这个group中只包含1个eventloop,即1个线程处理所有连接的accept请求。
  • 线程类型为VertxThread。
ThreadFactory acceptorEventLoopThreadFactory = new VertxThreadFactory("vert.x-acceptor-thread-", checker, false, options.getMaxEventLoopExecuteTime());
acceptorEventLoopGroup = new NioEventLoopGroup(1, acceptorEventLoopThreadFactory);
acceptorEventLoopGroup.setIoRatio(100);
  • NioEventLoopGroup eventLoopGroup
  • 负责处理网络读写事件。这个group大小为通过vertx设置的eventloop大小,即eventLoopPoolSize。
  • 线程类型为VertxThread。
eventLoopGroup = new NioEventLoopGroup(options.getEventLoopPoolSize(), eventLoopThreadFactory);
eventLoopGroup.setIoRatio(NETTY_IO_RATIO);
  • WorkerPool workerPool
  • worker线程池,用于执行耗时任务,在调用vertx.executeBlocking方法的Handler回调会在worker线程池中执行。
  • 线程类型为VertxThread。
ExecutorService workerExec = Executors.newFixedThreadPool(options.getWorkerPoolSize(),
        new VertxThreadFactory("vert.x-worker-thread-", checker, true, options.getMaxWorkerExecuteTime()));

PoolMetrics workerPoolMetrics = isMetricsEnabled() ? metrics.createMetrics(workerExec, "worker", "vert.x-worker-thread", options.getWorkerPoolSize()) : null;

workerPool = new WorkerPool(workerExec, workerPoolMetrics);
  • WorkerPool internalBlockingPool:
  • 内部线程池,用于执行内部Action类型回调。
  • 线程类型为VertxThread。
ExecutorService internalBlockingExec = Executors.newFixedThreadPool(options.getInternalBlockingPoolSize(),
        new VertxThreadFactory("vert.x-internal-blocking-", checker, true, options.getMaxWorkerExecuteTime()));

PoolMetrics internalBlockingPoolMetrics = isMetricsEnabled() ? metrics.createMetrics(internalBlockingExec, "worker", "vert.x-internal-blocking", options.getInternalBlockingPoolSize()) : null;

internalBlockingPool = new WorkerPool(internalBlockingExec, internalBlockingPoolMetrics);

相关文章

  • Vertx

    背景 对于vertx框架,最基础的组件就是vertx,几乎所有功能都是通过vertx实现。 vertx聚合了网络通...

  • Vertx

    Vertx

  • vertx架构

    对于部署标准模式verticle,vertx的架构如下: 对于部署worker模式verticle,vertx的架...

  • 因为使用了Vertx CodeGen 导致lombok无法正常工

    因为使用了Vertx CodeGen 导致lombok无法正常工作解决方案:放弃使用 Vertx CodeGen

  • Context

    背景 在vertx框架中,核心概念是verticle,通过vertx可以部署多个verticle,且verticl...

  • vertx实践二——基于EventBus的交互demo

    1.代码展示 第一个vertx服务启动类 第一个vertx服务verticle 第二个vertx服务启动类 第二个...

  • vertx

    Vert.x保证同一个普通Verticle(也就是EventLoop Verticle,非Worker Verti...

  • Verticle

    背景 verticle相当于1个执行模块,是vertx的部署单元。 vertx可以部署多个verticle,且ve...

  • websocket开发中遇到的伪技术问题

    vertx是一个轻量,灵活的后端框架,最近在使用vertx时使用了它的websocket,对于websocket相...

  • Kotlin整合Vertx开发Web应用

    今天我们尝试Kotlin整合Vertx,并决定建立一个非常简单的Web应用程序,使用Kotlin和Vertx作为编...

网友评论

      本文标题:Vertx

      本文链接:https://www.haomeiwen.com/subject/jfrypttx.html