本篇文章给大家介绍有关golang的相关知识,聊聊一个非常好用的golang并发控制库,希望对大家有所帮助。

GOPROXY=https://goproxy.cn go get -v github.com/lxzan/concurrency@latest
contex.Contex
panic recover, 返回包含错误堆栈的 error
time.Ticker 和 channel
WaitGroup.package mainimport (
"fmt"
"github.com/lxzan/concurrency"
"sync/atomic")func main() {
sum := int64(0)
w := concurrency.NewWorkerGroup()
for i := int64(1); i <= 10; i++ {
w.AddJob(concurrency.Job{
Args: i,
Do: func(args interface{}) error {
fmt.Printf("%v ", args)
atomic.AddInt64(&sum, args.(int64))
return nil
},
})
}
w.StartAndWait()
fmt.Printf("sum=%d\n", sum)}4 5 6 7 8 9 10 1 3 2 sum=55
package mainimport (
"fmt"
"github.com/lxzan/concurrency"
"time")func Add(args interface{}) error {
arr := args.([]int)
ans := 0
for _, item := range arr {
ans += item }
fmt.Printf("args=%v, ans=%d\n", args, ans)
return nil}func Mul(args interface{}) error {
arr := args.([]int)
ans := 1
for _, item := range arr {
ans *= item }
fmt.Printf("args=%v, ans=%d\n", args, ans)
return nil}func main() {
args1 := []int{1, 3}
args2 := []int{1, 3, 5}
w := concurrency.NewWorkerQueue()
w.AddJob(
concurrency.Job{Args: args1, Do: Add},
concurrency.Job{Args: args1, Do: Mul},
concurrency.Job{Args: args2, Do: Add},
concurrency.Job{Args: args2, Do: Mul},
)
w.StopAndWait(30*time.Second)}args=[1 3], ans=4args=[1 3 5], ans=15args=[1 3], ans=3args=[1 3 5], ans=9
以上就是分享一个非常好用的GO并发控制库 !的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号