WEB开发网
开发学院软件开发Java nio框架中的多个Selector结构 阅读

nio框架中的多个Selector结构

 2009-10-08 00:00:00 来源:WEB开发网   
核心提示: 基本上是一个reactor实现的样子,在AbstractNIOTransport类维护了一个SelectorRunner的数组,nio框架中的多个Selector结构(5),而Grizzly 用于创建tcp server的类TCPNIOTransport正是继承于AbstractNIOTrans

基本上是一个reactor实现的样子,在AbstractNIOTransport类维护了一个SelectorRunner的数组,而Grizzly 用于创建tcp server的类TCPNIOTransport正是继承于AbstractNIOTransport类,在它的start方法中调用了 startSelectorRunners来创建并启动SelectorRunner数组:

  private static final int DEFAULT_SELECTOR_RUNNERS_COUNT = 2;
 @Override
  public void start() throws IOException {
  if (selectorRunnersCount <= 0) {
                selectorRunnersCount = DEFAULT_SELECTOR_RUNNERS_COUNT;
            }
  startSelectorRunners();
}
 protected void startSelectorRunners() throws IOException {
        selectorRunners = new SelectorRunner[selectorRunnersCount];
        
        synchronized(selectorRunners) {
            for (int i = 0; i < selectorRunnersCount; i++) {
                SelectorRunner runner =
                        new SelectorRunner(this, SelectorFactory.instance().create());
                runner.start();
                selectorRunners[i] = runner;
            }
        }
    }

可见Grizzly并没有采用一个单独的池对象来管理SelectorRunner,而是直接采用数组管理,默认数组大小是2。 SelectorRunner实现了Runnable接口,它的start方法调用了一个线程池来运行自身。刚才我提到了说Grizzly的Accept 是单独一个Selector来管理的,那么是如何表现的呢?答案在RoundRobinConnectionDistributor类,这个类是用于派发注册事件到相应的SelectorRunner上,它的派发方式是这样:

上一页  1 2 3 4 5 6  下一页

Tags:nio 框架 多个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接