当前位置: 首页 > news >正文

护肤网站模版广告投放效果评估

护肤网站模版,广告投放效果评估,内网穿透做网站,上海网站建设哪我们的bossgroup和workgroup都是使用的NioEventLoopGroup。其内部有一个EventExecutor类型的数组用来存储所有的线程组。 NioEventLoopGroup {EventExecutor[] children; }NioEventLoopGroup继承自MultithreadEventExecutorGroup,构造函数不指定线程数默认会根据系…

我们的bossgroup和workgroup都是使用的NioEventLoopGroup。其内部有一个EventExecutor类型的数组用来存储所有的线程组。

NioEventLoopGroup {EventExecutor[] children;
}

NioEventLoopGroup继承自MultithreadEventExecutorGroup,构造函数不指定线程数默认会根据系统cpu进行计算获取。是一个线程池实现类。

在MultithreadEventExecutorGroup构造函数里初始化children。调用newChild方法创建NioEventLoop实例赋给children。EventExecutor[] children 元素实例类型是NioEventLoop。

来看下具体代码:

protected MultithreadEventExecutorGroup(int nThreads, Executor executor,EventExecutorChooserFactory chooserFactory, Object... args) {checkPositive(nThreads, "nThreads");if (executor == null) {//executor 初始化executor = new ThreadPerTaskExecutor(newDefaultThreadFactory());}children = new EventExecutor[nThreads];for (int i = 0; i < nThreads; i ++) {boolean success = false;try {//newChild方法就是创建一个NioEventLoop实例,设置executorchildren[i] = newChild(executor, args);success = true;}}//...
}

executor是ThreadPerTaskExecutor类型,其execute方法就是创建一个线程执行runnable参数任务。

public final class ThreadPerTaskExecutor implements Executor {private final ThreadFactory threadFactory;public ThreadPerTaskExecutor(ThreadFactory threadFactory) {this.threadFactory = ObjectUtil.checkNotNull(threadFactory, "threadFactory");}@Overridepublic void execute(Runnable command) {threadFactory.newThread(command).start();}
}

newChild方法就是创建一个NioEventLoop实例,设置executor。

NioEventLoop是一个很重要的类,很多事件逻辑都是在该类中完成。

下面是NioEventLoop类主要方法。
在这里插入图片描述

NioEventLoop继承自SingleThreadEventExecutor。是一个单线程处理类。我们创建的channel都会和该类进行绑定。

主要属性

属性名说明
taskQueue任务队列,被执行的任务首先会被放到任务队列。
executor执行器,上面创建child传入ThreadPerTaskExecutor类型
selector绑定的selector
thread当前EventLoop的运行线程

主要方法

方法说明
register(Channel channel)绑定channel
addTask(Runnable task)新增一个任务到TaskQueue
pollTask()取出一个任务
startThread()启动线程,会判断当前EventLoop内的线程状态,线程是否已运行,否则调用 doStartThread()启动线程
doStartThread()会调用executor.execute(Runnable)启动一个线程运行入参任务,将启动线程赋值给thread变量。入参会调用run()方法。
execute(Runnable task)执行一个任务,首先会调用addTask加入队列,然后判断是否wakeup执行线程
inEventLoop(Thread thread)判断当前线程和内部变量thread是否是同一个线程
runAllTasks(long timeoutNanos)执行任务队列里的任务
select(curDeadlineNanos)调用Selector的select方法,阻塞监听事件发生
processSelectedKeys();处理监听到的SelectedKeys
processSelectedKey(SelectionKey k, AbstractNioChannel ch)处理具体的某一key事件
http://www.yayakq.cn/news/723376/

相关文章:

  • 校园网站建设管理最新一键自助建站程序源码
  • 可以兼职做设计的网站wordpress 什么意思
  • 新干县城乡建设局网站彩票网站开发 添加彩种教程
  • 微信公众号做视频网站吗莱芜论坛都市网
  • 利用网站做淘宝客什么网站比较好
  • 东莞外贸网站建设哪家好绍兴网站开发08keji
  • 龙岗住房和建设局网站intellij 网站开发
  • 北京做网站建设公司哪家好北京网站建设公司哪个最好
  • 临沂医院网站建设免费推广手段
  • 怎么欣赏一个网站设计图海外网入口
  • 网站焦点图设计pr
  • 北京网站建设公司房山华网做淘宝主要看哪些网站
  • 专业营销型网站建设公司12333上海公共招聘网官网
  • 建设网站和网页有啥区别广州建设网站的公司哪家好
  • 有没有能帮人快速网站备案的机构网站开发怎么才能接到私活
  • 纪检部门网站举报建设分类信息网站推广的意义
  • 手机网站页面制作合肥高端网站建设公司
  • 个人网站转为企业网站成都纯手工seo
  • 微信网站模块潍坊网站制作建设
  • 怎样查找网站域名优惠券网站要怎么做的
  • h5网页网站制作代码外链查询网站
  • 电脑做服务器建网站并让外网访问网络推广渠道有哪些哪些
  • 网站建设合同 知乎网站建设人员春招计划
  • 开源网站代码网站域名更换相应内容
  • 网站升级维护中页面网络平台贷款
  • 哪里有最新的网站源码合肥网站seo服务
  • 做一个跨境电商网站网站建设域名服务器
  • 黄江网站设计帮别人做网站赚多少钱
  • 网站中全景是怎么做的旅游网站开发的目的和意义
  • 枞阳网站制作如何做网站百度排名优化