ActiveJ框架学习——Async I/O之Eventloop(一)

2021SC@SDUSC

        ActiveJ具有自己的高性能异步I / O核心:Eventloop,Promise和Net。它还具有异步数据流处理功能:CSP和Datastream。

        异步I/O不同于其他功能,根据上述就能够知道,该部分功能被分为了5个不同的包(如下图):

        那么,本篇博文就来分析事件链接(Eventloop)的有关内容。

        先是在ActiveJ的官网查询了一下Eventloop的大致内容。是这么介绍的:

        Eventloop module is the foundation of other modules that run their code asynchronously inside event loops and threads. It provides efficient management of asynchronous operations without multithreading overhead. Particularly useful for building client-server applications with high-performance requirements.

         虽然Eventloop是最低级别的工具,甚至你几乎不会直接用到它。但它仍然是ActiveJ及其重要的组成部分,它将使你了解ActiveJ的异步模型设置。

        那么让我们来看一下Eventloop的作用。

        Eventloop代表一个无限循环,每个 循环 执行所有的任务,这些任务由 Selector 提供,或存储在 特殊队列中。 这些任务中的每一个都应该是小的,其执行被称为 tick。

        Eventloop无限循环的唯一阻塞操作是 Selector.select()。 该操作选择一组键 ,其对应的通道已准备好进行I/O操作。 Eventloop异步处理选定的键,并在单线程中执行 排队的runnable。

        Eventloop与不同类型的任务一起工作,这些任务被存储在不同的队列中。

        当此事件循环没有选定的密钥且其带任务的队列为空时,此事件循环的工作将结束。

        具体操作如下:

        从此线程中添加的本地任务的集合。从其他线程中添加的并发任务的集合。收集计划在特定时间戳执行的预定任务。收集背景任务,如果事件循环仅包含背景任务,则将关闭。其他线程中的并发操作量(非零值)可防止事件循环终止。

private final ArrayDeque<Runnable> localTasks = new ArrayDeque<>();
private final ArrayList<Runnable> nextTasks = new ArrayList<>();
private final ConcurrentLinkedQueue<Runnable> concurrentTasks = new ConcurrentLinkedQueue<>();
private final PriorityQueue<ScheduledRunnable> scheduledTasks = new PriorityQueue<>();
private final PriorityQueue<ScheduledRunnable> backgroundTasks = new PriorityQueue<>();
private final AtomicInteger externalTasksCount = new AtomicInteger(0);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值