netty nioeventloopgroup,netty eventloop源码分析

  netty nioeventloopgroup,netty eventloop源码分析

  

目录

NioEventLoopGroup之NioEventLoop的创建我们来看第二步构造NioEventLoop我们继续跟到NioEventLoop的构造方法最后跟到AbstractEventExecutor类的构造方法前文传送门:Netty源码分析NioEventLoop

 

  

NioEventLoopGroup之NioEventLoop的创建

回到上一小节的多线程事件执行组类的构造方法:

 

  受保护的MultithreadEventExecutorGroup(int n threads,Executor executor,EventExecutorChooserFactory chooserFactory,Object.args) { //代码省略if (executor==null) { //创建一个新的线程执行器(1)executor=new threadpertasktexecutor(newDefaultThreadFactory());} //构造NioEventLoop(2)children=新事件执行器[n个线程];for(int I=0;i nThreadsi ) {布尔成功=假;try { children[I]=new child(executor,args);成功=真;} catch(Exception e){ throw new IllegalStateException(未能创建子事件循环,e);}最后{ //代码省略} } //创建线程选择器(3)选择器=选择器工厂。新选择器(儿童);//代码省略}

  

我们来看第二步构造NioEventLoop

这里通过children=新事件执行者[nThreads]初始化了孩子们属性,看下这个属性的定义:

 

  私有最终事件执行者[]个孩子这里的孩子们是事件执行者类型的数组,其实就是NioEventLoop的集合,因为NioEventLoop也是事件执行者的子类

  所以这里初始化了孩子们数组,大小为参数n线程传入的线程数量,默认为中央处理器核数的两倍

  后面就是通过为循环来创建NioEventLoop线程,

  在循环体里通过儿童[i]=新儿童(执行者,参数)创建NioEventLoop,我们跟新儿童(执行人,参数)方法

  因为是NioEventLoopGroup调用的,所以跟到NioEventLoop的newChild方法中:

  受保护的EventLoop newChild(执行器执行器,对象.参数)抛出异常{ return new NioEventLoop(this,executor,(SelectorProvider) args[0],((SelectStrategyFactory) args[1]).newSelectStrategy(),(RejectedExecutionHandler)args[2]);}这里我们看到创建了一个NioEventLoop对象,其中这是NioEventLoopGroup自身,执行者就是上一小节讲到的线程执行器

  

我们继续跟到NioEventLoop的构造方法

NioEventLoop(NioEventLoopGroup parent,Executor executor,SelectorProvider,SelectStrategy strategy,rejected execution handler rejected execution handler){ super(parent,Executor,false,DEFAULT_MAX_PENDING_TASKS,rejected execution handler);//代码省略provider=selectorProviderselector=open selector();选择策略=策略;}首先看到了调用了父类的构造方法,然后初始化了几个属性:

 

  selector=openSelector()这种方式创建个NioEventLoop绑定的选择器对象,有关创建过程,之后会讲到

  跟进父类SingleThreadEventLoop类构造方法:

  protected SingleThreadEventLoop(EventLoopGroup parent,Executor executor,boolean addTaskWakesUp,int maxPendingTasks,RejectedExecutionHandler RejectedExecutionHandler){ super(parent,Executor,addTaskWakesUp,maxPendingTasks,RejectedExecutionHandler);tail tasks=新任务队列(maxpending tasks);}再跟到父类单线程事件执行器构造方法:

  protected SingleThreadEventExecutor(EventExecutorGroup parent,Executor executor,boolean addTaskWakesUp,int maxPendingTasks,RejectedExecutionHandler rejected handler)super(parent);这个。addTaskWakesUp=addTaskWakesUp这个。maxpending tasks=math。max(16,max pending tasks);这个。执行者=对象实用程序。checknotnull(executor,执行者);任务队列=新任务队列(this。最大未决任务);rejectedExecutionHandler=object util。check not null(拒绝的处理程序,“拒绝的处理程序”);}这个。执行者=对象实用程序。checknotnull(执行者,“执行者”)

  这里初始化了线程执行器

  任务队列=新任务队列(this。最大挂起任务数)

  是创建一个任务队列,这个任务队列可以将不属于NioEventLoop线程的任务放到这个任务队列中,通过NioEventLoop线程执行,具体使用场景之后我们会看到

  跟到父类抽象调度事件执行器的构造方法中:

  protected abstractscheduledeventwentexecutor(event executor group parent){ super(parent);}

  

最后跟到AbstractEventExecutor类的构造方法

受保护的AbstractEventExecutor(event executor组父级){ this。parent=parent}这里初始化了父母,这个父母就NioEventLoop所属的线程组NioEventLoopGroup对象

 

  至此,NioEventLoop创建完成

  以上就是妮蒂源码解析NioEventLoop创建的构造方法的详细内容,更多关于Netty NioEventLoop构造方法的资料请关注盛行信息技术其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: