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 重要优化

站长声明

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

标签:

相关文章

  • 用GPT-4这样的大模型玩狼人杀,人类因为太蠢被投票判死,真正的逆向图灵测试

    用GPT-4这样的大模型玩狼人杀,人类因为太蠢被投票判死,真正的逆向图灵测试

    在这篇文章中,我们看到了人工智能如何与经典的社交推理游戏互动《狼人杀》结合创造了一个有趣的实验。 视频展示了亚里士多德、克利奥帕特拉等以历史人物为模型的人工智能 NPC 与人类玩家互动的场景。 人类玩家因答案不够复杂而被淘汰,颠覆了传统的图灵测试。 本文探讨了 AI

    06-17

  • 杭州出台25条措施加快生物医药产业高质量发展

    杭州出台25条措施加快生物医药产业高质量发展

    日前,杭州市人民政府办公厅发布《关于加快生物医药产业高质量发展若干措施的通知》。 该措施自2020年11月15日起实施,有效期至2020年12月31日。 该措施重点支持药品、高端医疗器械、先进制药装备、新型服务外包、数字医学、医学美容。 措施全文如下: 关于加快生物医药产业高

    06-18

  • 14nm写入上海市政府工作报告:今年实现量产

    14nm写入上海市政府工作报告:今年实现量产

    1月27日,上海市第十五届人民代表大会第二次会议正式开幕。 上海市市长应勇作政府工作报告。 报告中回顾了2017年上海发展现状,部署了全年重点工作和任务。 上海作为国家集成电路产业的重要集聚区,在年度政府工作报告中多处提及集成电路。 应勇在回顾一年来的工作时表示,“

    06-06

  • 海外呼叫中心服务:连接全球市场的桥梁

    海外呼叫中心服务:连接全球市场的桥梁

    .wp-block-column h3{margin-left:0} 1.引言 在全球化背景下,越来越多的企业开始寻求拓展海外市场。 随着国际贸易的日益频繁和跨境电商的兴起,海外呼叫中心服务作为连接企业与海外客户的重要桥梁,正逐渐受到越来越多企业的关注。 本文将对海外呼叫中心服务的定义、重要性、

    06-17

  • 库克谈苹果可持续发展计划:我们必须做得好,别人才想效仿 - Feel Good Weekly

    库克谈苹果可持续发展计划:我们必须做得好,别人才想效仿 - Feel Good Weekly

    Feel Good简介 苹果:我们的可持续发展计划必须好到让人想“复制” MINI推出首款电动自行车 lululemon:更多中国消费者正在积极探索“Good Condition”最新快闪店“雀巢咖啡,使用后可以回收。 无畏:为旅程提供气候标签的第一步苹果:我们必须可持续“复制”最“绿色”的秋季

    06-21

  • 猫生活领先品牌Pidan完成B+轮融资,兴旺投资独家领投,

    猫生活领先品牌Pidan完成B+轮融资,兴旺投资独家领投,

    据7月5日消息,近日,猫生活领先品牌Pidan完成B+轮融资,兴旺投资独家领投。 Pidan品牌起源于法国巴黎。 以其高品质、高设计的宠物产品多次荣获德国红点奖。 Pidan独创混合猫砂品类,在天猫猫砂品类中排名第一。 Pidan瞄准“猫市场”,将自己定位为全品类宠物生活方式品牌。

    06-17

  • Village Fund将于今晚在纽约证券交易所上市,沈南鹏称值得长期投资

    Village Fund将于今晚在纽约证券交易所上市,沈南鹏称值得长期投资

    中式快餐连锁乡村基金今晚将在纽交所上市,成为首家中式餐饮企业。 红杉资本中国基金创始人兼高管合伙人沈南鹏在接受新浪财经独家采访时表示,他被乡村基金的“深刻印象”所吸引。 它的快速增长才刚刚开始,值得他长期投资。   Village Base是一家以美味川菜为主,与当地风

    06-18

  • 二氧化硅龙头确辰硅化主板挂牌,盈科资本IPO再获丰收

    二氧化硅龙头确辰硅化主板挂牌,盈科资本IPO再获丰收

    12月7日,确辰硅化(83.SH)在上交所正式挂牌上市。 截至目前,盈科资本年度IPO项目总数已达14个,其中科创板6个、创业板4个、主板3个、港交所1个。 同期IPO数量继续保持行业领先地位。 作为全球前三、亚洲第一的二氧化硅行业领军企业,确成硅化现已形成从原料硫酸、水玻璃到

    06-18

  • 南芯半导体完成数千万元A轮融资,顺为资本领投

    南芯半导体完成数千万元A轮融资,顺为资本领投

    据投资界1月23日消息,高性能模拟芯片半导体公司南芯半导体完成数千万元A轮融资处于A轮融资中。 本轮融资由顺为资本领投,兴业资本海逸、紫米科技跟投。 南芯也是顺为资本投资的第一家芯片设计公司。   南芯半导体成立于2001年,主要从事集成电路芯片的研究、设计、开发和销

    06-18

  • 春华资本宣布收购美赞臣大中华区业务

    春华资本宣布收购美赞臣大中华区业务

    春华资本宣布与利洁时签署最终协议,收购利洁时美赞臣大中华区业务,并将拥有美赞臣品牌在大中华区市场的永久权益此次独家使用权将从业务创新、运营完善、渠道优化、数字化转型等方面支持美赞臣未来在中国的发展。

    06-17

  • 英伟达需要警惕的对手来了

    英伟达需要警惕的对手来了

    市值超1.7万亿美元的AI军火商英伟达开始感受到“危机”,需要警惕各类“对手” 。 日前,有消息称孙正义计划筹集1亿美元创建一家AI芯片公司,旨在挑战英伟达。 近日,AI芯片初创公司Groq也透露出颠覆英伟达的意图。 NVIDIA在AI芯片市场上无可匹敌。 本财年,NVIDIA的销售额连

    06-18

  • 春节“医美”热潮,爱美客和昊海生科谁更赚钱?

    春节“医美”热潮,爱美客和昊海生科谁更赚钱?

    在外表经济的轨道上,医美项目逐渐成为消费主流。 随着春节假期的到来,医美的消费将迎来又一个高峰期。 “医美三剑客”中,爱美客(96.SZ)和昊海生科(66.SH)近日公布了2020年业绩报告:2020年,爱美客预计实现净利润18.10亿元至1.900元亿元,同比增长43%-50%;昊海生科预

    06-17