今天看啥  ›  专栏  ›  GoCN

震惊! Go 1.23中Timer无buffer的实现方式竟是这样!

GoCN  · 公众号  ·  · 2024-07-10 13:40

文章预览

Go 1.23 对 time.Timer 和 time.Ticker 的实现进行了两项重大更改。 首先,如果程序中不再引用某个 Timer 或 Ticker ,则这些定时器或计时器会立即成为垃圾回收的候选对象,即使它们的 Stop 方法尚未被调用,也会被垃圾回收掉。在 Go 的早期版本中,未停止的 Timer 只有 在触发后才会被回收 ,而未停止的 Ticker 则 永远不会被回收 。 其次,与 Timer 或 Ticker 关联的定时器通道现在变为无缓冲的,容量为 0。这一更改的主要效果是,Go 现在保证对于任何调用 Reset 或 Stop 方法的操作,在该调用之前准备的任何过时值都不会在调用后被发送或接收。在 Go 的早期版本中,这些通道使用了 一个元素的缓冲区 ,这使得正确使用 Reset 和 Stop 变得困难。这一更改的一个明显效果是,现在定时器通道的 len 和 cap 将返回 0 而不是 1 ,这可能会影响那些通过 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览