Home  >  Article  >  Backend Development  >  Share a very easy-to-use GO concurrency control library!

Share a very easy-to-use GO concurrency control library!

藏色散人
藏色散人forward
2022-12-21 18:01:404743browse

This article will introduce you to the relevant knowledge about Golang and talk about a very easy-to-use golang concurrency control library. I hope it will be helpful to everyone.

Share a very easy-to-use GO concurrency control library!

Concurrency

Build Status

##install

GOPROXY=https://goproxy.cn go get -v github.com/lxzan/concurrency@latest

Feature

    Limit on the number of concurrent coroutines
  • Support
  • contex.Contex
  • Support
  • panic recover, return contains The error
  • recursively implements task scheduling of the error stack and does not rely on
  • time.Ticker and channel

Usage

    WorkerGroup work group, adding a group of tasks and waiting for execution to complete, can be a good alternative to
  • 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
    WorkerQueue Work queue, you can continuously add tasks to it, and execute it once the CPU resources are free [Recommendation:
  • go tutorial]
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

The above is the detailed content of Share a very easy-to-use GO concurrency control library!. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete