简短小模式 —— 时间事件发生器模式

需求

大部分程序会有一些需要周期执行的事情,也有一些需要在程序启动后执行一次的事情。很明显这类事情和时间有关,因为它们都需要在特定时间发生。这类需要执行的逻辑可以由时间事件发生器触发。

时间事件发生器

时间事件发生器是挂载在虚拟根VirtualRoot上的一个组件,它负责在特定的时间将特定类型的事件发布到系统总线上去。时间事件发生器会发布的事件有:

代码位置

HasBoot1SecondEventHasBoot2SecondEventHasBoot5SecondEventHasBoot10SecondEventHasBoot20SecondEventHasBoot1MinuteEventHasBoot2MinuteEventHasBoot5MinuteEventHasBoot10MinuteEventHasBoot20MinuteEventHasBoot50MinuteEventHasBoot100MinuteEventHasBoot24HourEvent?Per1SecondEventPer2SecondEventPer5SecondEventPer10SecondEventPer20SecondEventPer1MinuteEventPer2MinuteEventPer5MinuteEventPer10MinuteEventPer20MinuteEventPer50MinuteEventPer100MinuteEventPer24HourEvent

以上26种时间事件的设计灵感来源于人民币币值的设计,具体为什么是这些数值我们不做深究,实践证明这些数值正是开源矿工所需要的。

由谁发出这些时间事件?

可以看出,这类时间事件不属于任何模块,它们是由硬件系统的cpu发出的,所以对于我们的系统来说应该把时间事件发生器放在我们的系统的虚拟根VirtualRoot上。

这些消息发送到什么地方去?

发布到系统总线上去。每一个系统都应该有自己内部的系统总线,时间事件消息正是发布到系统自己内部的总线上去的。系统内部的各组件根据自己的需求从总线上订阅事件修建事件消息所行走的路径。

力:走那条线程驱动这类事件?

如果你的系统是单线程的系统就不存在这个问题了,如果是多线程的系统尤其是带界面的系统的话这会是一个问题。根据自己的情况,这类事件可以由UI主线程驱动也可以由非UI线程驱动,值得注意的是如果这个事件发生器由非UI线程驱动的话订阅这些消息的程序需要处处小心自己的部分逻辑是否需要在UI上执行,如果这个发生器由UI线程驱动的话订阅这些事件的程序也要处处小心自己的逻辑是否会耗时超过50毫秒。

原文地址:https://www.cnblogs.com/ntminer/p/11031506.html

时间: 2024-10-26 16:50:43

简短小模式 —— 时间事件发生器模式的相关文章

Java设计模式补充:回调模式、事件监听器模式、观察者模式(转)

一.回调函数 为什么首先会讲回调函数呢?因为这个是理解监听器.观察者模式的关键. 什么是回调函数 所谓的回调,用于回调的函数. 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数. 有这么一句通俗的定义:就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法. 举个例子: 这里有两个实体:回调抽象接口.回调者(即程序a) 回调接口(ICallBack ) public i

【设计模式】事件总线模式

前言 事件总线模式(Event Bus Pattern)是发布/订阅模式的一种实现.它是一种集中式的事件处理机制,允许不同组件彼此通信,但又不相互依赖,实现松耦合.Grafana 开源项目的软件架构就采用了事件总线模式. 事件总线模式 事件总线模式包含如下组件: Event:不同组件间传递的数据.可广泛地说,事件可以分为三类:Event,Command 和 Request.三者的区分可以参考 Grafana 设计文档(在 Grafana 中,Request 被称为 Query) Bus:各通信组

#干货#小微信贷风控中类IPC模式和集中审批模式

浅析小微信贷风控中类IPC模式和集中审批模式 席占斌 常言道瑕不掩瑜,反过来讲瑜自然也不能掩瑕,看问题需要客观公正辩证. 在小微信贷中,风控模式依旧是核心,目前比较流行和占比较大的风控模式有很经典的IPC模式和集中审批模式.为什么要说是模式呢?因为不管是IPC还是集中审批,很多的具体操作到各个公司均不相同.本文仅就这两种模式的整体情况做一浅显的分析. 一.两种风控模式完整流程简介 1.完整的类IPC的流程 产品设计--信贷员营销--后台入申请--信贷员进行类IPC尽职调查--门店电话审核--权限

云计算设计模式(七)——事件获取模式

云计算设计模式(七)--事件获取模式 使用仅追加存储到记录完整一系列描述在一个域上取数据,而不是存储仅仅是当前的状态,从而使存储区可以被用来实现该域对象的动作事件.该图案可以通过避免需要同步的数据模型和商业领域中简化复杂的结构域的任务;提高性能,可扩展性和响应能力;提供交易数据的一致性;并保持完整的审计跟踪和记录,可能使补偿措施. 背景和问题 大多数应用程序使用数据,并在典型的方法是应用到通过更新它作为用户使用的数据保持数据的当前状态.例如,在传统的创建,读取,更新和删除(CRUD)模型的典型数

用java语言实现事件委托模式

http://blog.csdn.net/yanshujun/article/details/6494447 用java语言实现事件委托模式 2010-04-27 00:04 2206人阅读 评论(11) 收藏 举报 java语言游戏object设计模式date 事件委托模式是一个比较常用的设计模式,但是Java语言本身没有对其做一定的封装,因此实现起来有一定难度(了解原理后很简单),相比之下.NET就容易了很多. 身为一个Java爱好者,怎么向这样一个小困难低头,但是上网搜索,却没发现相关解决

微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨

sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang上次也分享了新浪微薄的模式).下面我们就微博的feed推拉(push,pull)模式做一下探讨,并提出新的时间分区拉模式. 众所周知,在微博中,当你发表一篇微博,那么所有关注你的followers(粉丝)都会在一定的时间内收到你的微薄,这有点像群发一封邮件,所有的

9、Cocos2dx 3.0游戏开发找小三之工厂方法模式与对象传值

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27704153 工厂方法模式 工厂方法是程序设计中一个经典的设计模式,指的是基类中只定义创建对象的接口,将实际的实现推迟到子类中. 在这里,我们将它稍加推广,泛指一切生成并返回一个对象的静态函数. 一个经典的工厂方法如同这样: Sprite* factoryMethod() { Sprite* ret = new Sprite(); //在这里对 ret

使用aicp实现事件回调模式

相对于asio事件等待池aiop的reactor模式,基于proactor模式的事件回调池aicp封转的更加的上层. 在类unix系统上 底层是基于aiop的实现,在一个线程里面进行事件等待,然后分发所有事件,在worker中处理完后调用回调返回到上层. 并对不同系统的aiop支持力度,进行针对性优化. 如果aiop支持边缘触发(例如:epoll.kqueue),尽量启用边缘触发,以减少系统api的频繁调用. 使用sendfile对发送文件进行优化 针对linux系统,启用native file

node.js 事件发射器模式

目录: 前言 Node.js事件驱动介绍 Node.js事件 注册并发射自定义Node.js事件 EventEmitter介绍 EventEmitter常用的API error事件 继承EventEmitter 前言: 今天事儿太多了,没有发太多的东西.不好意思了各位. 本篇主要介绍Node.js中的事件驱动,至于Node.js事件概念的东西,太多了. 本系列课程主要抱着的理念就是,让大家慢慢的入门,我也尽量写的简单一点. 所以呢,本文事件驱动,大家的目标应该是:理解Node.js的事件驱动.会