🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
本节将深入探讨第一台水泵——Reader子系统的工作原理。Reader子系统的输入端是设备节点,输出端是Dispatcher子系统的派发队列。从设备节点到派发队列之间的过程发生了什么呢?本章一开始曾经介绍过,一个设备节点对应了一个输入设备,并且其中存储了内核写入的原始事件。因此设备节点拥有两个概念:设备与原始事件。因此Reader子系统需要处理输入设备以及原始事件两种类型的对象。 设备节点的新建与删除表示了输入设备的可用与无效,Reader子系统需要加载或删除对应设备的配置信息;而设备节点中是否有内容可读表示了是否有新的原始事件到来,有新的原始事件到来时Reader子系统需要开始对新事件进行加工并放置到派发队列中。问题是应该如何监控设备节点的新建与删除动作以及如何确定节点中有内容可读呢?最简单的办法是在线程循环中不断地轮询,然而这会导致非常低下的效率,更会导致电量在无谓地轮询中消耗。Android使用由Linux提供的两套机制INotify与Epoll优雅地解决了这两个问题。在正式探讨Reader子系统的工作原理之前,需要首先了解这两套机制的使用方法。