作者:陈明勇
个人网站:https://chenmingyong.cn
文章持续更新,如果本文能让您有所收获,欢迎点赞收藏加关注本号。 微信阅读可搜《程序员陈明勇》。 这篇文章已被收录于 Github,欢迎大 家Star 催更并持续关注。
前言
Go 1.23
版本在北京时间 2024 年 8 月 14 日凌晨 1:03 发布。该版本带来了多项重大更新,具体内容可以参考我之前的文章:Go 1.23 版本发布啦,这些重大更新你一定要知道!。本文将重点介绍其中关于定时器(Timer
和 Ticker
)的优化。
准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。
Timer 和 Ticker 的基本概念
在深入探讨 Go 1.23
版本对 Timer
和 Ticker
定时器进行的优化之前,有的读者可能需要了解这两种定时器的基础知识。以下是关于这两种定时器的基本介绍:
-
Timer
是一个一次性的定时器,用于在未来的某一时刻执行一次操作。常用于单次延迟执行任务。 -
Tciker
是一个周期性的定时器,用于在固定的时间间隔重复执行任务。它在每个间隔时间到来时,向其通道(Channel
)发送当前时间。常用于重复执行任务。
垃圾回收的改进
- Go 1.23 之前的行为: 如果一个
Timer
或Ticker
没有被显式调用Stop
方法,即使程序不再引用它们,它们也不会立即被垃圾回收。Timer
会在触发后被回收,而Ticker
则从来不会被自动回收。 - Go 1.23 新行为: 如果程序不再引用一个
Timer
或Ticker
(即没有其他部分的代码持有它们的引用),即使没有调用Stop
方法,它们也会有资格立即被垃圾回收。这可以减少内存泄漏的风险,因为不再需要显式调用Stop
也可以保证资源会被回收。