Vertx框架

1.Holder应用
Holder是把具备强关联性的信息打包在一起不便同时更新,如EventLoopHolder,VerticleHolder。

VertxEventLoopGroup增加woker,然而实际上包了一层EventLoopHolder,因为woker和woker的handler count 密切相关。

  private static class EventLoopHolder {    int count = 1;    final EventLoop worker;    EventLoopHolder(EventLoop worker) {      this.worker = worker;    }

2.轮询实现
VertxEventLoopGroup对外提供next办法,一直调用next就是一直遍历列表过程,起到轮询作用。

  @Override  public synchronized EventLoop next() {    if (workers.isEmpty()) {      throw new IllegalStateException();    } else {      EventLoop worker = workers.get(pos).worker;      pos++;      checkPos();      return worker;    }  }

3.面向对象继承,拓展框架性能,为我所用
netty的ServerBootstrap原型是group(EventLoopGroup parentGroup, EventLoopGroup childGroup)

个别应用netty都是用netty的NioEventLoopGroup作为I/O线程组,但vertx框架没有应用NioEventLoopGroup,而是VertxEventLoopGroup,定制vertx须要的简略性能,增加额定的操作 public synchronized void addWorker(EventLoop worker),这个是NioEventLoopGroup所没有的,然而这个addWorker动静退出woker,是Vertx多个verticle 实例共享listen port的一个必要路径。

另外,之所以能够拓展,蕴含一个软件设计思维,是netty的框架group入参是Interface,依赖形象,而不是依赖具体实现。

ServerBootstrap bootstrap = new ServerBootstrap();// getAcceptorEventLoopGroup是一个NioEventLoopGroup,但workers是VertxEventLoopGroup,便于vertx框架拓展bootstrap.group(vertx.getAcceptorEventLoopGroup(), channelBalancer.workers());public final class VertxEventLoopGroup extends AbstractEventExecutorGroup implements EventLoopGroup {// vertx拓展增加  public synchronized void addWorker(EventLoop worker) {    EventLoopHolder holder = findHolder(worker);    if (holder == null) {      workers.add(new EventLoopHolder(worker));    } else {      holder.count++;    }  }}