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

公司网站备案名称注册名字商标查询

公司网站备案名称,注册名字商标查询,wordpress调用指定文章详情,新媒体运营工作内容目录 1、背景2、go版本3、源码解释【1】Ticker结构【2】NewTicker函数解释 4、代码示例5、总结 1、背景 说到定时器我们一般想到的库是cron#xff0c;但是对于一些简单的定时任务场景#xff0c;标准库time包下提供的定时器就足够我们使用#xff0c;本篇文章我们就来研究… 目录 1、背景2、go版本3、源码解释【1】Ticker结构【2】NewTicker函数解释 4、代码示例5、总结 1、背景 说到定时器我们一般想到的库是cron但是对于一些简单的定时任务场景标准库time包下提供的定时器就足够我们使用本篇文章我们就来研究一下time包下的Ticker定时器。 2、go版本 $ go version go version go1.21.4 windows/386 3、源码解释 【1】Ticker结构 Ticker结构如下 type Ticker struct {C -chan Time //元素类型为Time的只读通道r runtimeTimer //底层定时结构 }runtimeTimer结构如下 type runtimeTimer struct {pp uintptrwhen int64 //定时器触发时间period int64 //定时器触发间隔f func(any, uintptr) //定时器触发要执行的函数arg any //定时器触发执行函数的参数seq uintptrnextwhen int64 //定时器下次触发时间status uint32 }【2】NewTicker函数解释 NewTicker函数用于初始化Ticker对象源码如下 func NewTicker(d Duration) *Ticker {if d 0 {panic(non-positive interval for NewTicker)}c : make(chan Time, 1) //初始化一个存放时间类型缓冲区大小为1的通道t : Ticker{C: c, //时间通道r: runtimeTimer{ //底层定时对象when: when(d), //下一次任务执行时间period: int64(d), //每次任务执行间隔f: sendTime, //时间到之后要执行的函数arg: c, //要执行的函数的参数},}startTimer(t.r) //开启定时任务更底层逻辑不用关心其实现return t }初始化之后我们一般使用Ticker对象的方式为间隔d时间从Ticker对象里的C通道读取到当前时间一般我们认为到时间之后就会往C通道写入当前时间每次间隔时间都能读到数据其实每次间隔不一定能读到这个就看sendTime函数的实现了源码如下 func sendTime(c any, seq uintptr) {select {case c.(chan Time) - Now():default:} }select中有一个default块前面看过c通道的缓冲区大小为1如果上一次缓冲区里记录的时间未被读取那么这次写c通道就会阻塞select没有找到合适的case时就会走default分支所以这次时间并不会记录到通道缓冲区中就已经开始准备下一个到时间点执行逻辑。后面会给一个简单的例子来演示这种场景。 4、代码示例 接下来给一个示例来演示从Ticker的通道中读取时间不一定是固定间隔的示例如下 func main() {logger.Info(测试Ticker开始)t : time.NewTicker(5 * time.Second) //创建一个定时器,每隔5秒执行一次time.Sleep(17 * time.Second) //延时5552秒logger.Info(第1次读取通道, zap.Time(读取到的时间, -t.C))logger.Info(第2次读取通道, zap.Time(读取到的时间, -t.C)) }上面示例初始化了一个每5秒执行一次的定时对象我们延时5的整数倍再加小于5的时间之后从定时对象的通道中读取两次时间并打印出来观察打印输出如下 [2024-11-29 17:31:12.902] | INFO | Goroutine:1 | [chan_demo/main.go:74] | 测试Ticker开始 [2024-11-29 17:31:29.981] | INFO | Goroutine:1 | [chan_demo/main.go:80] | 第1次读取通道 | {读取到的时间: [2024-11-29 17:31:17.986]} [2024-11-29 17:31:32.978] | INFO | Goroutine:1 | [chan_demo/main.go:81] | 第2次读取通道 | {读取到的时间: [2024-11-29 17:31:32.978]}开始定时任务时间为12秒第1次读取通道和第2次读取通道时间分别为17和32秒并不是间隔5秒的也就验证了22、27秒走的sendTime函数中的default分支。 5、总结 通过对Ticker对象中通道的理解在select中有多个case时对于准备好的caseselect会从中随机选择一个所以要注意case中如有Ticker的通道对象时不一定会定时间隔的读取到数据。Ticker对象还提供了一些其它的函数Stop(停止定时器)、Reset(重置定时器)、Tick(返回只读的时间通道)。
http://www.hkea.cn/news/14272911/

相关文章:

  • 邯郸网站建设选哪家好网站二维码弹窗
  • 商品网站建设实验报告手机制作表格的软件免费
  • 网站开发团队公司模式室内设计论坛网站
  • 宁波网站建设哪家公司好网龙网络有限公司
  • 安卓商城网站开发中国中小企业信息网官网
  • 徐州市贾汪区建设局网站企业网站登录
  • 软文营销把什么放在第一位婚纱摄影网站seo方案
  • 仿腾讯网站源码上海网站开发前十名
  • 保定市建设局安监网站用旧手机做网站
  • 开一家软件外包公司长春seo公司
  • 网站建设易网宣抚顺 网站建设
  • 企业培训课程一览表搜索引擎优化自然排名的区别
  • 网站前台展示家乡网页设计论文
  • 湛江企业自助建站召唤神龙网页小游戏在线玩
  • 网站架构包括哪些深圳东门麦当劳
  • 长沙企业网站建设团队北京住总第一开发建设有限公司网站首页
  • 素材下载平台网站源码找活做的网站
  • 企业网站建设规划的基本原则是什么中国河北网站
  • 大连html5网站建设深圳企业网页制作
  • 赣州网站建设开发网站模块建设方案
  • 做商城网站技术要点花的网站建设规划书
  • 做视频资源网站有哪些自建app免费制作平台
  • 成都模板网站建设平罗县住房和城乡建设局网站
  • 新网站备案广告设计与制作专业分析
  • 想自己做个网站中国建设部网站失信名单
  • 小程序 网站建设 app 开发建设工程培训
  • 网站页面打开速度企业信息查询系统官网北京
  • 长沙网站设计公司广东新闻频道直播在线观看高清
  • 包年seo和整站优化华为品牌策划方案
  • 做营销网站设计宁波网站推广方式