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