少女祈祷中...
Justin's Blog

go语言并发

1.原生并发

package utils

import (
	"sync"
)

var sum int
var mu sync.Mutex

func add(n int) {
	mu.Lock()
	sum += n
	mu.Unlock()
}

func RunAdd(count int) int {
	var wg sync.WaitGroup

	for i := 0; i <= count; i++ {
		wg.Add(1)

		go func(n int) {
			defer wg.Done()
			add(n)

		}(i)

	}
	wg.Wait()
	return sum
}

2.使用Go 扩展库进行并发

go get github.com/sourcegraph/conc

package utils

import (
	"github.com/sourcegraph/conc/pool"
)

var sumByConc int

func addByconc(i int) {
	sumByConc += i
}

func AddByConc(num int) int {
	p := pool.New().WithMaxGoroutines(100)

	for i := 0; i <= 100; i++ {
		p.Go(func() {
			addByconc(i)
		})
	}
	p.Wait()
	return sumByConc
}