NioEventLoop执行一个任务的流程
2020-09-15 01:48:17 0 举报
Netty中NioEventLoop执行一个任务的流程
作者其他创作
大纲/内容
doStartThread()
processSelectedKeys()获取事件并执行对应事件的逻辑
是按照固定频率
普通Runnable类型的run方法
否
是
task类型为ScheduledFutureTask
runAllTasks()
取出scheduledTaskQueue中的task放入taskQueue
ScheduledFutureTask的run()方法
selectCnt =0
根据获取事件执行的时间和io比例得出执行任务执行的时间
select结果赋值给变量strategy;selectCnt++
否则return
rebuildSelector
将任务(this)再次添加到scheduledTaskQueue中
多路复用器立刻进行一次select操作
afterRunningAllTasks()
AbstractScheduledEventExecutor
execute(task)/lazyExecute(task)
不是
SingleThreadEventExecutor
return
periodNanos >0?
一个 Runnable类型的command
ScheduledFutureTask
taskQueue或tailTask中是否有任务
执行任务数量>0或strategy>0
任务未被取消?
计算下一次任务的执行时间,到下一次任务的执行时间执行一次select
task中封装的command执行一次
当前线程是不是执行线程
periodNanos ==0?
否按照固定延迟
schedule(task)
另起一个线程执run方法
使用command构造一个ScheduledFutureTask对象task
直接将task放入优先队列scheduledTaskQueue
计算出下次任务的执行时间
将task放入taskQueue
是否超出任务的执行时间
设置线程状态为已启动
runTasks是否64倍数
NioEventLoop
runTasks ++
selectCnt>阈值
如果当前线程是执行任务的线程
startThread()
是否已经启动
收藏
0 条评论
下一页