本文介绍 golang 中异步处理相关的知识。
Package sync 提供了基本的同步原语,如互斥锁。除了 Once 和 WaitGroup 类型外,大多数都是为低级库程序设计的。更高级别的同步更适合通过通道和通信来完成。
包含在此包中定义的类型的值不应被复制。
Once
once.Do 只会执行一次,即使更换了别的函数也不会再次执行。示例代码:
OnceFunc
func OnceFunc(f func()) func()
OnceFunc 返回一个只调用 f 一次的函数。返回的函数可以被并发调用。
下面的代码中, incr 虽然被调用两次,但是 v 只在第一次调用的时候增加。
OnceValue
func OnceValue[T any](f func() T) func() T
OnceValue 返回一个函数,该函数仅调用 f 一次并返回 f 返回的值。返回的函数可以被并发调用。
下面的代码中,randValue 只会被执行一次。
OnceValues
除了返回两个参数外,与 onceValue 没有什么不同。
func OnceValues[T1, T2 any](f func() (T1, T2)) func() (T1, T2)
Pool
Mutex
RWMutex
Cond
用于同时唤醒多个等待队列。
Map
WaitGroup
示例代码:
评论