grapeTimer

时间调度器
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 作业/任务调度
软件类型 开源软件
地区 国产
投 递 者 赵英哲
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

grapeTimer 时间调度器

一款粗粒度的时间调度器,可以帮你通过一些字符串快速并简单的创建时间任务。

用于游戏服务端的优化设计,大量并行的时间调度方式。

简单介绍:

  • 通过命令格式创建time.Time

  • 简洁的Api格式,轻度且可拆分的函数库

  • 快速创建调度器

  • 可控的调度器时间粒度

  • 高性能的并发调度

  • 时间周期,次数多模式可控[支持每天,每周,每月]

  • *可选择对调度器保存或内存执行[待实现]

  • *生成可保存的调度器字符串并反向分析他生成调度器[待实现]

  • 不依赖第三方库

安装方法

go get -u -v github.com/koangel/grapeTimer

基本用法

// 初始化一个1秒钟粒度的调度器,ars代表是否自动设置运行为并行模式
grapeTimer.InitGrapeScheduler(1*time.Second, true)
// 启动一个单次执行的调度器,1秒时间,基本tick单位为毫秒
Id := grapeTimer.NewTickerOnce(1000, exec100, nil)
// 启动一个1秒为周期的 循环timer
Id = grapeTimer.NewTickerLoop(1000, exec100Loop, nil)
// 启动一个每日规则的定时器,参数为args data
Id = grapeTimer.NewTimeDataOnce("Day 13:59:59", exeDayTime, "args data")
// 启动一个每日循环规则的定时器,参数为args data
Id = grapeTimer.NewTimeDataLoop("Day 13:59:59", exeDayTime, "args data")

所有执行函数请保持以下函数格式:

func exec100(args interface{}) {
	fmt.Printf("exec100")
}

func exec100Loop(args interface{}) {
	fmt.Printf("exec100Loop")
}

func exeDayTime(args interface{}) {

}

停止计时器

// 将自动返回的ID作为参数传入可停止持续循环的TIMER
grapeTimer.StopTimer(Id)

参数设置

// 设置启用日志调试模式,建议正式版本关闭他
grapeTimer.CDebugMode = true
// 调用分析器使用的时区,可以个根据不同国家地区设置 
grapeTimer.LocationFormat = "Asia/Shanghai"
// 开启异步调度模式,在此模式下 timer执行时会建立一个go,不会阻塞其他timer执行调度,建议开启
grapeTimer.UseAsyncExec = true

保存调度器

待添加

生成调度器字符串

待添加

可用格式说明

调度器有轻度的日期模式分析体系,可提供每日,每周,每月的时间日期生成方式,具体格式如下:

关键字 格式 说明
Day Day 00:00:00 生成每日的日期时间
Week Week 1 00:00:00 生成每周的日期时间, 0~6 分别代表周日到周六
Month Month 1 00:00:00 生成每月该日期的时间,建议不要使用20日之后的日期

以上日期如果超过时间自动生成下一个时间,每月时间使用时,如本月不存在该日期,则直接返回错误。

代码示例:

vtime, err := grapeTimer.Parser("Day 13:59:59") // 返回值为标准的*time.Time
	if err != nil {
		// 处理错误...
	}

        vtime, err = grapeTimer.Parser("Week 6 23:59:59")
	if err != nil {
		// 处理错误...
	}

	vtime, err = grapeTimer.Parser("Month 26 13:59:59")
	if err != nil {
		// 处理错误...
	}

代码输出:

2017-05-24 13:59:59 +0800 CST
 相关资料
  • 相同优先级线程按照时间片轮番调度 相同优先级线程按照时间片轮番调度 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the first

  • 我正在尝试理解这些调度算法: 先到先得(FCFS) 最短作业优先(SJF) 最短剩余时间(SRT) 循环赛(RR) 因此,给定一些输入: FCFS将安排为。 我似乎无法弄清楚其余的。有人可以帮助我解释差异吗? 我试过谷歌搜索,但我为SJF得到的结果有点令人困惑。

  • 我正在与石英时间表和一切工作完美根据要求。但有一件事我想实现,即我希望我的下一个作业执行将触发(currentFinishTime+intervalOfScheduler) 间隔为30秒的作业执行示例: 请帮助我解决我的问题。

  • 在FCFS调度算法中,缺点是如果具有更高突发时间的进程P1先于P3 P2的一些进程...突发时间越短,平均等待时间和平均完成时间就越长。 这个问题的解决方案是首先调度最短的作业(SJF算法)。 但是如何提前计算突发时间呢?开发人员是否规定了一个公式,根据可用的资源,提前计算完成一项工作的突发时间?

  • null null 线程组用于登录事务,有57个示例。当我点击Run时,整个线程不是运行1800秒,而是运行84秒 运行前有什么需要检查或配置的吗?

  • 我有以下时间安排优化问题: 有n个Rest时间要安排。一次Rest占用每个15分钟的k时间颗粒。我看到的总视界是m个时间颗粒。每次谷物都有一个需要优化的中断量。开始中断的范围是每个中断定义的,您不能自由选择范围。 break.scala: Timegrain.scala: 中断分配: 我在想出正确的模型的时候,是不是走错了方向?