Kongsi perpustakaan kawalan konkurensi GO yang sangat mudah digunakan!

藏色散人
Lepaskan: 2022-12-21 18:01:40
ke hadapan
4748 orang telah melayarinya

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
Salin selepas log masuk

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)}
Salin selepas log masuk
4 5 6 7 8 9 10 1 3 2 sum=55
Salin selepas log masuk
  • 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)}
Salin selepas log masuk
args=[1 3], ans=4args=[1 3 5], ans=15args=[1 3], ans=3args=[1 3 5], ans=9
Salin selepas log masuk

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!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan