Teilen Sie eine sehr benutzerfreundliche GO-Bibliothek zur Parallelitätskontrolle!

藏色散人
Freigeben: 2022-12-21 18:01:40
nach vorne
4748 Leute haben es durchsucht

Dieser Artikel führt Sie in das relevante Wissen über Golang ein und spricht über eine sehr einfach zu verwendende Golang-Parallelitätskontrollbibliothek. Ich hoffe, dass er Ihnen hilfreich sein wird.

Teilen Sie eine sehr benutzerfreundliche GO-Bibliothek zur Parallelitätskontrolle!

Parallelität

Build Status

install

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

Feature

  • Begrenzung der Anzahl gleichzeitiger Coroutinen
  • Supportcontex.Contex contex.Contex
  • 支持 panic recover, 返回包含错误堆栈的 error
  • 递归实现的任务调度, 不依赖 time.Tickerchannel

Usage

  • WorkerGroup 工作组, 添加一组任务, 等待执行完成, 可以很好的替代WaitGroup
  • UnterstützungPanik wiederherstellen, gibt error einschließlich Fehlerstapel zurück
    rekursiv implementierte Aufgabenplanung, verlässt sich nicht auf time.Ticker und channel
Verwendung🎜🎜🎜WorkerGroup-Arbeitsgruppe, eine Gruppe von Aufgaben hinzufügen, auf den Abschluss der Ausführung warten, kann ein guter Ersatz für WaitGroup sein.🎜🎜
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)}
Nach dem Login kopieren
4 5 6 7 8 9 10 1 3 2 sum=55
Nach dem Login kopieren
🎜🎜WorkerQueue-Arbeitswarteschlange, Sie können kontinuierlich arbeiten Fügen Sie Aufgaben hinzu, sobald diese vorhanden sind. Führen Sie sie aus, wenn die CPU-Ressourcen frei sind. [Empfohlen: 🎜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)}
Nach dem Login kopieren
args=[1 3], ans=4args=[1 3 5], ans=15args=[1 3], ans=3args=[1 3 5], ans=9
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonTeilen Sie eine sehr benutzerfreundliche GO-Bibliothek zur Parallelitätskontrolle!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage