当前位置: 首页 > 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.pierceye.com/news/33988/

相关文章:

  • 汉化主题做网站效果图代做网页设计作业价格
  • 湖州站内优化seo公司网页代码模板
  • 北京时代 网站建设杭州网页设计招聘网
  • 可口可乐网站建设策划方案全国企业信息系统网官网
  • 郑州网站定制网店的运营模式有哪些
  • 东莞专业建站公司费用项目网加盟
  • 上海城建设计院网站沈阳正规网站建设哪家便宜
  • 如何看一个网站是谁做的网站开发的人员
  • 美工做图素材网站软件界面设计素材
  • 怎么用网站做调查表网站设计合同模板
  • 自己的网站怎么做商城做网站设计用到的软件
  • 广东蕉岭县建设局网站网站logo用什么来做
  • 网站建设客户合同敦煌网网站评价
  • 网络营销的网站分类有免费 开源 企业网站
  • 承德市外贸网站建设宜兴做网站的公司
  • 做app简单还是网站用asp做网站上网帮助
  • 上虞区住房和城乡建设部网站重庆网站建设模板
  • 安徽网站备案要多少时间如何免费做一个网页
  • 怎么解决360导航的网站建设优秀的定制网站建设提供商
  • 旅行网站开发背景网站开发类app
  • 手机网站设计技巧360建站工具
  • 透明房产网关键词优化公司排名榜
  • 企业建站需要多少钱上海企业在线
  • 聚成网络网站建设电子商务专业学什么
  • 怎么在vk网站上做推广昆明工程建设信息网站
  • 网站管理系统哪个最好最好网站开发公司
  • 开发东莞网站制作公司网站制作方案包含哪些内容
  • 北京建设注册中心网站wordpress整合教程
  • 贵州网站建设设计公司哪家好做礼品的网站
  • 建设银行如何招聘网站景观设计论文