> 백엔드 개발 > Golang > 매우 사용하기 쉬운 GO 동시성 제어 라이브러리를 공유하세요!

매우 사용하기 쉬운 GO 동시성 제어 라이브러리를 공유하세요!

藏色散人
풀어 주다: 2022-12-21 18:01:40
앞으로
4786명이 탐색했습니다.

이 기사에서는 Golang에 대한 관련 지식을 소개하고 매우 사용하기 쉬운 golang 동시성 제어 라이브러리에 대해 이야기하겠습니다.

매우 사용하기 쉬운 GO 동시성 제어 라이브러리를 공유하세요!

Concurrency

Build Status

install

GOPROXY=https://goproxy.cn go get -v github.com/lxzan/concurrency@latest
로그인 후 복사

Feature

  • 동시 코루틴 수 제한
  • contex.Contex 지원contex.Contex
  • 支持 panic recover, 返回包含错误堆栈的 error
  • 递归实现的任务调度, 不依赖 time.Tickerchannel

Usage

  • WorkerGroup 工作组, 添加一组任务, 等待执行完成, 可以很好的替代WaitGroup
  • 패닉 지원 복구, 오류 스택
Usage🎜🎜🎜작업 그룹을 추가하고 실행이 완료될 때까지 기다리는 WorkerGroup 작업 그룹은 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 작업 대기열을 대체할 수 있습니다. 지속적으로 작업을 추가하세요. CPU 리소스가 비어 있을 때 실행하세요. [권장: 🎜가기 튜토리얼🎜]🎜🎜
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿