Go 1.23 新特性:Timer 和 Ticker 重要优化

发布于:2024-10-24 编辑:匿名 来源:网络

前言 北京时间 8 月 14 日凌晨 1:03,Go 1.23 版本发布。该版本带来了多项重大更新。

具体可以参考我之前的文章:Go 1.23版本发布。这些重大更新你一定要知道! 。

本文将重点讨论定时器(Timer 和 Ticker)的优化。你准备好了吗?喝一杯您最喜欢的咖啡或茶,然后按照本文查找答案。

Timer 和 Ticker 的基本概念 在深入研究 Go 1.23 版本中 Timer 和 Ticker 定时器的优化之前,有些读者可能需要了解这两个定时器的基本知识。下面是对这两个定时器的基本介绍: Timer是一次性定时器,用于在未来某一时间执行一项操作。

常用于任务的单次延迟执行。 Tciker是一个周期性定时器,用于以固定的时间间隔重复执行任务。

当每个间隔时间到来时,它会将当前时间发送到其通道(Channel)。通常用于执行重复性任务。

关于Timer和Ticker的更多详细信息,请参考我之前的文章:Go Timer:Timer和Ticker。垃圾收集 Pre-Go 1.23 行为的改进:如果 Timer 或 Ticker 没有显式调用 Stop 方法,则即使程序不再引用它们,它们也不会立即被垃圾收集。

Timer触发后会被回收,而Ticker永远不会被自动回收。 Go 1.23 中的新行为:如果程序不再引用 Timer 或 Ticker(即代码的其他部分没有引用它们),则即使未调用 Stop 方法,它们也有资格立即进行垃圾回收。

这降低了内存泄漏的风险,因为不再需要显式调用 Stop 并且保证资源被回收。此更新提高了内存管理效率。

以前,如果您创建了 Timer 或 Ticker 但忘记调用 Stop,这些对象将占用内存直到程序结束。现在,只要程序不再引用这些对象,它们就会被回收,从而避免了内存泄漏的问题。

Timer 通道行为的变化 Go 1.23 之前的行为:与 Timer 或 Ticker 关联的通道有一个元素缓冲区,这导致 Reset 或 Stop 方法调用后仍然接收之前准备的旧值,造成使用困难。Go 1.23 中的新行为:计时器通道变为无缓冲(容量为 0)。

这意味着在调用 Reset 或 Stop 方法后,Go 保证不会再次收到旧值。这使得 Reset 和 Stop 的使用更加可靠。

副作用:由于通道现在是无缓冲的,因此 len 和 cap 操作返回的值变为 0 而不是 1。这可能会影响依赖轮询通道长度来确定是否可以成功接收值的代码。

为了适应这一变化,代码应该使用非阻塞接收操作。此更新使计时器操作更加可靠和安全。

在 Go 1.23 之前,Timer 和 Ticker 通道是缓冲的,这意味着即使您调用 Reset 或 Stop,旧的计时信号可能仍保留在通道中,从而导致潜在的竞争条件。现在,在更改为无缓冲通道后,Go 保证该通道在调用 Reset 或 Stop 后将不再接收旧数据。

我们来看看以下代码在不同 Go 版本中的运行情况: 代码语言: go copy package mainimport ("fmt" "time")func main() {// 程序退出信号 quit := make(chan bool)timer : = time.NewTimer(2 * time.Second)go func() {// 确保定时器已经触发并发送信号 time.Sleep(4 * time.Second)// 尝试读取通道,看是否有a value select { case t := <-timer.C:fmt.Println("收到定时器信号:", t.Format(time.DateOnly))default:fmt.Println("无信号")}quit <- true }( )// 确保计时器已触发并发送信号 time.Sleep(3 * time.Second)wasStopped :=timer.Stop()if wasStopped {// Go 1.23 或更高版本将采用此分支 fmt.Println( " 定时器未超时,停止成功") } else {// Go 1.23之前的版本会走此分支 fmt.Println("定时器已超时,信号已发送") }// 等待退出Go 1.22及之前版本运行结果中的signal <-quit}: 代码语言: shell复制定时器已过期,信号已发送。定时器信号已收到:08-20 由于通道是缓冲的,当定时器到期时信号已发送,因此即使在定时器触发后调用 Stop() 方法,我们仍然可以从缓冲区接收信号。

Go 1.23以上运行结果: 代码语言:shell复制定时器未过期,无信号停止成功 由于通道是无缓冲的,信号发送是一个阻塞操作。如果在接收到信号之前调用 Stop() 方法,这将阻止信号发送。

因此,计时器成功停止并且 Stop() 返回 true。注意:只有当 Go 模块使用 go.mod 文件并指定 Go 1.23.0 或更高版本时,定时器和 Ticker 的这些新行为才会生效。

也就是说,如果你的Go版本是Go 1.23,但是你在go.mod文件中指定的Go版本小于Go 1.23,这些新行为将不会生效。另外,如果您在 go.mod 文件中指定的 Go 版本大于或等于 Go 1.23,您可以通过在环境变量 GODEBUG 中设置 asynctimerchan=1 来恢复之前的异步通道行为。

总结 本文详细介绍了 Go 1.23 中对 Timer 和 Ticker 的重要优化,主要包括两个方面:垃圾收集的改进和计时器通道行为的改变。改进的垃圾收集机制有助于防止内存泄漏,同时对定时器通道的调整确保通道在调用Reset或Stop后不会接收任何旧数据,提高定时器操作的可靠性和安全性。

有关 Go 1.23 的更多详细更新将在未来按主题发布。关注我,不错过任何精彩内容。

Go 1.23 新特性:Timer 和 Ticker 重要优化

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 证监会:加强对拟上市公司投资的离职系统员工监管

    证监会:加强对拟上市公司投资的离职系统员工监管

    投资圈(ID:pedaily)4月20日消息:近日,有媒体报道中证建投系统离职员工证监会对拟上市公司的惊人投资,引起各方关注。 证监会对此高度重视,坚持防范违法违规“创富”,维护市场“三公”秩序,加强监管队伍廉洁建设。 坚持问题导向、举一反三,对在审企业进行全面排查,对

    06-17

  • 今晚,4500万人与周杰伦“时光倒流”

    今晚,4500万人与周杰伦“时光倒流”

    ,应该是一场激情的爱情约会。 但当晚19点35分,还没等两人晒出甜蜜合照,他们的朋友圈就被一个许久没有出专辑的男人入侵了。 你谈你的爱情,我看我的青春。 天晴在等待烟雨,粉丝在等待“地表最强妖天伦”。 数千人在视频号直播间回忆青春。 当34岁的周杰伦带着八块锋利的巧

    06-21

  • 为打造平价时尚服装市场,919氢仓获得青松基金等两轮合计数千万元融资,

    为打造平价时尚服装市场,919氢仓获得青松基金等两轮合计数千万元融资,

    据投资界(ID:pedaily)6月4日消息,平价时尚服装市场品牌“氢仓”宣布,先后获得青松基金天使轮和个人投资者战略轮共计数十轮投资。 融资数百万元。 据其创始人&CEO席一舟介绍,本轮融资将主要用于供应链建设、门店扩张和团队建设。 “公司将重点打造江苏、安徽、四川等地

    06-18

  • 鹤壁市长郭浩:中国5G产业创新创业大赛推动高质量发展

    鹤壁市长郭浩:中国5G产业创新创业大赛推动高质量发展

    4月2日下午,“中国5G产业创新创业大赛”作为5G产业前沿创新的重要舞台,已日益突出和影响。 吸引力持续增强,为推动高质量发展提供更多活力。 ”鹤壁市市长郭浩在中国5G产业创新创业大赛全国总决赛颁奖典礼暨鹤壁市旗滨区重点产业座谈会上表示。 “最近几年。 鹤壁积极适应新

    06-17

  • 北京理工大学与珠海学院联合成立集成电路技术现代产业学院

    北京理工大学与珠海学院联合成立集成电路技术现代产业学院

    7月4日,集成电路技术现代产业学院成立暨揭牌仪式在珠海高新区举行。 这所产业学院由北京理工大学珠海学院(信息学院)、广东中兴电子股份有限公司、珠海英思科技有限公司联合创办。 图片珠海高新区 珠海高新专区新闻显示,北理工珠海学院院长赵显礼表示,集成电路发展关系产

    06-06

  • 2024年北京车展,看这26款新车就够了

    2024年北京车展,看这26款新车就够了

    时隔4年,2024年北京车展终于又来了。 4年的时间并不算长,但对于汽车行业来说已经是一个巨大的变化。 如果说去年的上海车展让世界看到了中国新能源汽车的快速发展,那么今年的北京车展则证明了一件事情:世界新能源汽车潮流就在这次北京车展。 可以说,这种四年积累的潜力,

    06-21

  • 视联科技获凤凰卫视战略投资

    视联科技获凤凰卫视战略投资

    》据4月26日消息,视联科技近日完成新一轮战略融资。 本轮投资由凤凰卫视集团旗下凤凰创新产业基金投资,此次获得的融资将主要用于人工智能产品的落地,加快业务拓展和服务体系升级。

    06-18

  • 阿里云智能总裁张建锋:创新是丽水绿色发展之路

    阿里云智能总裁张建锋:创新是丽水绿色发展之路

    “创新是我们的第一动力,也是丽水绿色发展的路径。 ” 6月9日,阿里云智能总裁、阿里巴巴达摩院特朗张建锋在国家数字生态系统创新发展峰会上致辞时表示。 阿里云智库总裁、阿里巴巴达摩院院长张建锋总结称,自2016年丽水市政府与阿里巴巴集团签署战略协议以来,在双方共同努

    06-17

  • 小度迎新期待:百度集团CIO李莹轮流担任CEO

    小度迎新期待:百度集团CIO李莹轮流担任CEO

    10月7日最新消息,百度小度公司迎来新任CEO,百度集团副总裁、百度集团CIO李莹博士,直接向李彦宏汇报工作。 业内人士分析,这轮新一轮干部轮换对小度来说意义重大。 李莹在担任百度集团CIO期间,打造了以人工智能和知识管理为核心的智能工作平台,为百度AI基础技术和产品应

    06-17

  • 诺和诺德斥资7亿美元使用蛋白质组学药物

    诺和诺德斥资7亿美元使用蛋白质组学药物

    年底,Ventus Therapeutics宣布与诺和诺德达成全球*许可协议。 根据该协议,诺和诺德将获得Ventus专有的NOD样受体pyrin结构域相关蛋白3(NLRP3)外周抑制剂的开发和商业化权利。 诺和诺德将向Ventus预付 10,000 美元,并提供研发 (R&D) 资金。 Ventus还可能收到总计 6.33 亿美

    06-17

  • 中国南车香港上市获批, A+H股IPO拟募资20亿美元

    中国南车香港上市获批, A+H股IPO拟募资20亿美元

    据悉,中国最大的铁路机车装备制造商中国南车车辆股份有限公司首次公开发行股票(IPO)计划已经香港联交所批准。 获批后,连同在上海IPO,拟募集资金规模将达20亿美元,约1亿港元。   新闻 人士表示,总部位于北京的中国南车股份有限公司计划在香港IPO发行最多20亿股,并将于

    06-18

  • 以旧换新平台有德汇获人保远望基金近亿元B+轮融资

    以旧换新平台有德汇获人保远望基金近亿元B+轮融资

    据投资界12月29日消息,全品类以旧换新平台有德汇今日宣布完成近百笔融资获得人保财险、人保财险的B+轮融资。 人保远望基金是与启迪科技合作设立的。 据悉,本轮资金将用于拓展线下市场、升级后端渠道。   优德火此前已获得多轮融资:  获得龙腾资本天使轮投资;   再

    06-18