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

自响应式网站是什么意思广州做网站的公司哪家好

自响应式网站是什么意思,广州做网站的公司哪家好,建设工程合同司法解释一,WordPress开源项目目录 1、背景2、go版本3、源码解释【1】Ticker结构【2】NewTicker函数解释 4、代码示例5、总结 1、背景 说到定时器我们一般想到的库是cron,但是对于一些简单的定时任务场景,标准库time包下提供的定时器就足够我们使用,本篇文章我们就来研究…

目录

  • 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) //延时5+5+5+2秒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时,对于准备好的case,select会从中随机选择一个,所以要注意case中如有Ticker的通道对象时,不一定会定时间隔的读取到数据。Ticker对象还提供了一些其它的函数:Stop(停止定时器)、Reset(重置定时器)、Tick(返回只读的时间通道)。

http://www.yidumall.com/news/29481.html

相关文章:

  • 公司网站设计 杭州 推荐免费做推广的网站
  • 定制女仆南召seo快速排名价格
  • 故宫网站建设上海空气中检测出病毒
  • 全屏产品网站企业qq一年多少费用
  • 普陀网站建设哪家好专业精准网络营销推广
  • 山东省和住房建设厅网站网络推广页面
  • wap仿制网站教程东莞百度推广排名优化
  • 建设银行网站查开户行免费网站推广网站短视频
  • 怎么样的网站合适做城市代理seo研究中心怎么样
  • 网站视频提取软件app网站关键词推广工具
  • 自适应网站 seo怎么做站长之家域名信息查询
  • 徐州市建筑工程交易网合肥网站关键词优化公司
  • 模板兔自用主题WordPress在线seo关键词排名优化
  • 接了做网站的单子流程培训机构管理系统
  • 邯郸网站制作费用深度搜索
  • 网站后台界面seo入门黑帽培训教程
  • 市场调研网站有哪些网络舆情监测
  • 怎么把图片做超链接到网站怎么做网址
  • 做网站的是干嘛的百度账号人工客服电话
  • 凤岗镇网站建设公司百度导航最新版本
  • 用rp怎么做网站原型优化师助理
  • 化妆品网站建设策划方案域名停靠网页推广大全2021
  • 如何做攻击类型网站网络营销研究背景及意义
  • 外部调用wordpress 热门文章北京优化网站推广
  • 网页设计建网站流程seo网站优化
  • 梧州seo公司谈谈对seo的理解
  • 杭州市下城区建设厅网站培训心得体会800字
  • 建筑做地图分析的网站郑州网站seo
  • 网站建设地址北京昌平客户引流的最快方法是什么
  • 网站设关键字湖南百度推广开户