EventLoop处理IO事件和任务
2023-09-14 22:52:00 3 举报
EventLoop处理IO事件和任务
作者其他创作
大纲/内容
如果EventLoop状态是关闭并且任务还没有执行
在指定的超时时间内运行尽可能多的任务有助于确保EventLoop在忙碌时仍能响应,而在不那么忙碌时还能有效地处理任务
for (;;)
rebuildSelector0()
获取事件
判断当前线程是否是EventLoop的线程
thread = Thread.currentThread()
case SelectStrategy.SELECT
processSelectedKeys()
terminationFuture.setSuccess(null)
解决NIO空轮询BUG
SingleThreadEventExecutor.this.run()
否
执行剩余任务
NioEventLoop#run
抛异常拒绝这个任务
清理资源
这里使用promise模式,修改结果并通知任何等待其终止的外部实体
SingleThreadEventExecutor.class
doStartThread()
基于可用的I/O事件和待处理的任务,它决定事件循环的下一个动作
是
如果这个任务需要唤醒EventLoop执行,调用唤醒逻辑
计算选择策略
ioRatio == 100
runAllTasks(long timeoutNanos)
executor.execute
事件循环退出执行finally
非EventLoop线程的逻辑
如果这段发生IO异常
selector.wakeup()
execute(Runnable task)
runAllTasks()
new Runnable()
检查task是否为空
获取当前设置的I/O比率,决定I/O操作与任务执行之间的时间分配
task添加到队列
执行事件循环
select(wakenUp.getAndSet(false))
如果EventLoop状态是未开启
0 条评论
下一页
为你推荐
查看更多