Loading

Golang 协程(累加小案例)

之前有写一个java版本得,异步执行需要150ms左右,go则只需要100毫秒相当于加一次,这里的异步得效率比java要好很多啊
java版本的累加

原始版本:

func add(a int) int {
	//假设处理业务逻辑需要100ms
	time.Sleep(time.Millisecond * 100)
	return a
}
func main() {
	sum := 0
	start := time.Now().UnixNano() / 1e6
	for i := 0; i < 100; i++ {
		sum += add(i)
	}
	end := time.Now().UnixNano() / 1e6
	fmt.Printf("耗时:%d\n", end-start)
	fmt.Println(sum)

}

结果:

耗时:10012
4950

改良后得代码

func add1(a int,allocatChan chan int)  {
	time.Sleep(time.Millisecond * 100)
	allocatChan<-a
}

func main() {
	var sum int = 0
	var allocatChan chan int = make(chan int,100)
	var flag int = 0
	start := time.Now().UnixNano() / 1e6
	for i := 0; i < 100; i++ {
		go add1(i,allocatChan)
	}
	for{
		if flag == 100{
			break
		}
		flag+=1
		a:=<-allocatChan
		sum+=a
	}
	end := time.Now().UnixNano() / 1e6
	fmt.Printf("耗时:%d\n", end-start)
	fmt.Println(sum)
}

结果:

耗时:100
4950
posted @ 2023-07-05 15:07  猫鱼故巷  阅读(30)  评论(0编辑  收藏  举报