当前位置: 首页 > news >正文

个人网站需要哪些内容毕业设计在线交流平台

个人网站需要哪些内容,毕业设计在线交流平台,网站内部链接有什么作用,自己网站建设容易吗实现延迟消息具体思路我是看的下面这篇文章https://mp.weixin.qq.com/s/eDMV25YqCPYjxQG-dvqSqQ实现延迟消息最主要的两个结构#xff1a;环形队列#xff1a;通过golang中的数组实现#xff0c;分成3600个slot。任务集合#xff1a;通过map[key]*Task#xff0c;每个slot…实现延迟消息具体思路我是看的下面这篇文章https://mp.weixin.qq.com/s/eDMV25YqCPYjxQG-dvqSqQ实现延迟消息最主要的两个结构环形队列通过golang中的数组实现分成3600个slot。任务集合通过map[key]*Task每个slot一个mapmap的值就是我们要执行的任务。原理图如下实现代码如下package main;import (timeerrorsfmt)//延迟消息type DelayMessage struct {//当前下标curIndex int;//环形槽slots [3600]map[string]*Task;//关闭closed chan bool;//任务关闭taskClose chan bool;//时间关闭timeClose chan bool;//启动时间startTime time.Time;}//执行的任务函数type TaskFunc func(args ...interface{});//任务type Task struct {//循环次数cycleNum int;//执行的函数exec TaskFunc;params []interface{};}//创建一个延迟消息func NewDelayMessage() *DelayMessage {dm : DelayMessage{curIndex: 0,closed: make(chan bool),taskClose: make(chan bool),timeClose: make(chan bool),startTime: time.Now(),};for i : 0; i 3600; i {dm.slots[i] make(map[string]*Task);}return dm;}//启动延迟消息func (dm *DelayMessage) Start() {go dm.taskLoop();go dm.timeLoop();select {case {dm.taskClose dm.timeClose break;}};}//关闭延迟消息func (dm *DelayMessage) Close() {dm.closed }//处理每1秒的任务func (dm *DelayMessage) taskLoop() {defer func() {fmt.Println(taskLoop exit);}();for {select {case {return;}default:{//取出当前的槽的任务tasks : dm.slots[dm.curIndex];if len(tasks) 0 {//遍历任务判断任务循环次数等于0则运行任务//否则任务循环次数减1for k, v : range tasks {if v.cycleNum 0 {go v.exec(v.params...);//删除运行过的任务delete(tasks, k);} else {v.cycleNum--;}}}}}}}//处理每1秒移动下标func (dm *DelayMessage) timeLoop() {defer func() {fmt.Println(timeLoop exit);}();tick : time.NewTicker(time.Second);for {select {case {return;}case {fmt.Println(time.Now().Format(2006-01-02 15:04:05));//判断当前下标如果等于3599则重置为0否则加1if dm.curIndex 3599 {dm.curIndex 0;} else {dm.curIndex;}}}}}//添加任务func (dm *DelayMessage) AddTask(t time.Time, key string, exec TaskFunc, params []interface{}) error {if dm.startTime.After(t) {return errors.New(时间错误);}//当前时间与指定时间相差秒数subSecond : t.Unix() - dm.startTime.Unix();//计算循环次数cycleNum : int(subSecond / 3600);//计算任务所在的slots的下标ix : subSecond % 3600;//把任务加入tasks中tasks : dm.slots[ix];if _, ok : tasks[key]; ok {return errors.New(该slots中已存在key为 key 的任务);}tasks[key] Task{cycleNum: cycleNum,exec: exec,params: params,};return nil;}func main() {//创建延迟消息dm : NewDelayMessage();//添加任务dm.AddTask(time.Now().Add(time.Second*10), test1, func(args ...interface{}) {fmt.Println(args...);}, []interface{}{1, 2, 3});dm.AddTask(time.Now().Add(time.Second*10), test2, func(args ...interface{}) {fmt.Println(args...);}, []interface{}{4, 5, 6});dm.AddTask(time.Now().Add(time.Second*20), test3, func(args ...interface{}) {fmt.Println(args...);}, []interface{}{hello, world, test});dm.AddTask(time.Now().Add(time.Second*30), test4, func(args ...interface{}) {sum : 0;for arg : range args {sum arg;}fmt.Println(sum : , sum);}, []interface{}{1, 2, 3});//40秒后关闭time.AfterFunc(time.Second*40, func() {dm.Close();});dm.Start();}测试结果如下
http://www.zqtcl.cn/news/33988/

相关文章:

  • 建设网站号码是多少钱wordpress 附件地址
  • cms建站系统哪家好传统网站建设团队
  • 哈尔滨网站建设效果好怎么下载网站的模板
  • 广东手机网站开发公司网站运营推广方案
  • 免费注册网站域名物业管理系统功能模块
  • 百度做网站的服务合同厦门 做网站
  • asp.net网站开发技术网络平面设计培训班
  • 郑州 互联网 公司网站什么是网站设计种类
  • 国外无版权素材网站特种作业证查询
  • 做h5游戏的网站六图网
  • 汕头免费做网站浙江购物网站开发设计
  • 手机棋牌网站大全ui设计是什么工作
  • 顺德定制网站设计兰州app定制
  • 深圳网站开发哪家好品牌策划网站建设
  • 什么是网站备案镇江网络营销外包
  • 如何进入设计公司网站专业外贸网站
  • 电影网站开发源代码搜索关键词分析
  • 个人网站创建平台要多少钱wap网站 区别
  • 锦州哪里做网站蛋糕店的网页设计素材
  • 门户网站建设所需条件小企业网站建设哪里做得好
  • 商城网站建设机构网页代理访问
  • 做排行的网站网站建设对公司的发展
  • 网站怎么做访问量统计深圳网站建设 site
  • 太原微商网站建设二网站手
  • 网站的建设与运维排名点击软件怎样
  • 周口网站seowordpress社区小程序
  • aspcms自适应网站建设银行网站用户权限
  • 吴江建设局网站打不开网站备案 主办单位
  • 网站ftp地址查询上海有什么好玩的
  • 合肥做网站加盟网站后台文本编辑器