概述
用简单的示例解决go并发与普通单线程的区别:
1000个请求进来:
go的并发解决速度
go的单线程解决速度
两者比较即可了解go并发的魅力
channel的简单使用
定义通道
var c = make(chan int)
定义通道的接收方
func worker(i chan int) {
fmt.Println(<-i)
}
go worker(c)
通道的使用:
接收方 ⬅ 发送值
c <- 1
注意向通道发值的时候必须先定义通道的接收方
并发比较
用循环模拟1000请求
- 普通请求的处理
for i := 0 ; i < 1000 ; i++ {
print(i)
}
//该方法可表示处理单个请求的处理时间
func print(i int) {
fmt.Println(i)
time.Sleep(time.Microsecond)
}
花费时间:15s
2.channel 请求的处理
//定义通道
var c = make(chan int)
for i := 0 ; i < 1000 ; i++ {
//先建立起通道接收方才能向通道传值
go worker(c)
c <- i
}
//该方法可表示处理单个请求的处理时间
func worker(i chan int) {
fmt.Println(<-i)
time.Sleep(time.Microsecond)
}
花费时间:68ms