文章目录
前言
这是我从另外一篇分析EventLoop的文章中摘出来的,感觉比较独立。
EventExecutorGroup和EventExecutor
简单来说,EventExecutorGroup就是一个线程池,EventExecutor是它里面执行任务的最小单元。
它的运行机制图如下:
这两个接口的默认实现上面提到过,上面的机制肯定来自于具体的实现类,可以对照这具体实现类进行看。
解释一下图里面的重点内容:
- EventExecutorGroup里面包含了n个EventExecutor,n需要在初始化的时候就指定。
- 在EventExecutorGroup提交的任务,它都会选择组内一个EventExecutor(顺序轮询选择)去执行,所以运行机制的重点是EventExecutor。
- EventExecutor内部会和一个线程进行关联,当提交第一个任务的时候,线程启动并且不停运行,除非外界执行关闭操作。
- EventExecutor内部有两个队列:taskQueue和scheduleTaskQueue,前者是一个阻塞队列,存储提交的普通task(用execute或者submit方法提交的);后者是一个优先级队列(线程不安全),存储的是调度任务(用schedule方法提交的)