加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

你应该掌握的 Go 高级并发模式

发布时间:2021-03-07 10:51:21 所属栏目:动态 来源:互联网
导读:果 C 中已存在一条消息,则发送消息时将删除所有未读值。 必须有停止操作:否则 GC 无法回收它 设置 C 无用:消息仍将在原始的 channel 上发送。 time.Tick time.Tick 是对 time.NewTicker 的封装。最好不要使用该方法,除非你准备将 chan 作为返回结果并在
  • 果 C 中已存在一条消息,则发送消息时将删除所有未读值。
  • 必须有停止操作:否则 GC 无法回收它
  • 设置 C 无用:消息仍将在原始的 channel 上发送。

time.Tick

time.Tick 是对 time.NewTicker 的封装。最好不要使用该方法,除非你准备将 chan 作为返回结果并在程序的整个生命周期中继续使用它。正如官方描述:

垃圾收集器无法恢复底层的 Ticker,出现 " 泄漏 ". 请谨慎使用,如有疑问请改用 Ticker。

time.After

这与 Tick 的概念基本相同,它是对 Timer 进行封装。一旦计时器被触发,它将被回收。请注意,计时器使用了缓存容量是 1 的通道,即使没有接收者,它仍可以进行计数。如上所述,如果您关心性能且希望能够取消计时,那么你不应该使用 After。

time.Timer ( 也称为 time.WhatTheFork?!)

对于 Go 来说这是一个比较奇怪的 API :NewTicker(Duration) 返回了一个 *Timer 类型,该类型仅暴露一个定义为 chan 类型的变量 C ,这点非常奇怪。

通常在 Go 语言中允许导出的字段意味着用户可以获取或设置该字段,而此处设置变量 C 并没有实际意义。相反:设置 C 并重置 Timer 并不会影响之前在 C 通道的消息传递。更糟糕的是:AfterFunc 返回的 Timer 根本不会使用到 C。

这样看来,Timer 很奇怪,以下是 API 的概述:

(编辑:江门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!