Go并发
把一个任务拆分成多个可以同一时间一起运行的子任务,从而缩短运行时间
通俗解释:安排哪些事情需要按顺序做,哪些事情可以同时做
在运行程序是,不同的线程可能会被分配给不同的CPU核心,可能在同一时刻被执行,共享内存导致同时运行时产生错误。
一般的解决方法是上锁,同一时间只能有一个线程被执行
GO:则采用交流来共享内存(channel+select)
NB 可用select来避免阻塞,保证第一时间从有新消息的channel里收数据,从而不受传消息频率不同的影响
package main
import (
"fmt"
"time"
)
func main() {
ch1:=make(chan int)
ch2:=make(chan int)
go func() {
for {
time.Sleep(2 * time.Second)
ch1 <- 100
}
}()
go func() {
for {
time.Sleep(1 * time.Second)
ch1 <- 50
}
}()
for{
select {
case msg := <-ch1:
fmt.Println(msg)
case msg := <-ch2:
fmt.Println(msg)
}
}
}