Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kongsi perpustakaan kawalan konkurensi GO yang sangat mudah digunakan!

Kongsi perpustakaan kawalan konkurensi GO yang sangat mudah digunakan!

藏色散人
藏色散人ke hadapan
2022-12-21 18:01:404729semak imbas

Artikel ini akan memperkenalkan anda kepada pengetahuan yang berkaitan tentang Golang dan bercakap tentang perpustakaan kawalan serentak golang yang sangat mudah digunakan, saya harap ia akan membantu anda.

Kongsi perpustakaan kawalan konkurensi GO yang sangat mudah digunakan!

Concurrency

Build Status

pasang

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

Ciri

  • Hadkan bilangan coroutine serentak
  • Sokongancontex.Contex
  • Sokonganpanic recover, mengembalikan error
  • yang mengandungi ralat tindanan
  • Penjadualan tugas dilaksanakan secara rekursif, tidak bergantung pada time.Ticker dan channel

Penggunaan

  • WorkerGroup, tambahkan kumpulan Tugasan, menunggu pelaksanaan selesai, boleh menjadi pengganti yang baik untuk 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, anda boleh terus menambah tugasan padanya, dan setelah sumber CPU percuma, Pergi dan laksanakan [Disyorkan: pergi 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

Atas ialah kandungan terperinci Kongsi perpustakaan kawalan konkurensi GO yang sangat mudah digunakan!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam