이 기사에서는 Golang에 대한 관련 지식을 소개하고 매우 사용하기 쉬운 golang 동시성 제어 라이브러리에 대해 이야기하겠습니다.
GOPROXY=https://goproxy.cn go get -v github.com/lxzan/concurrency@latest
contex.Contex
지원contex.Contex
panic recover
, 返回包含错误堆栈的 error
time.Ticker
和 channel
WaitGroup
오류
를 반환합니다. 재귀적으로 구현된 작업 스케줄링은 time.Ticker
및 채널
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!