并发实现:协程
启动协程
多核CPU设置
func Loop(){
for i:=1;i<11;i++{
time.Sleep(time.Microsecond * 5)
fat.Printf(format:”%d,”,i)
}
}
//并发 协程是并行的 runtime.NumCPC())最大运行CPU数目
runtime.GOMAXPROCS(runtime.NumCPC() -1) 留一个给系统用
go gorotine.Loop()
go gorotine.Loop()
time.Sleep(time.Second *s)
多协程的通讯
channel
select
var chanout chan bool = make(chan bool)
var chanInt chan int = make(chan int,10)
// 发送数据
func Send(){
chanInt <- 1
chanInt <- 2
chanInt <- 3
time.Sleep(time.Second *2)
timeout <- true
}
//接受数据
func Receive(){
// num := <- chanInt
//fat.Println(num)
// num := <- chanInt
//fat.Println(num)
// num := <- chanInt
//fat.Println(num)
for{
select{
case num := <- chanInt:
fat.Println(num)
case <-timeout:
fat.Println(timeout)
}
}
}
//启动发送数据的协程
go gorotine.Send()
//启动接受数据的协程
go gorotine.Receive()
多协程间的同步
系统工具 sync.waitgroup
Add(delta int) 添加记录
var WG sync.WaitGroup
//读取数据
func Read(){
for i:=0;i<3;i++{
WG.Add(delta:1)
}
}
//写入数据
func Write(){
for i:=0;i<3;i++{
time.Sleep(time.Second * 2)
WG.Done()
}
}
gorotine.Read()
go gorotine.Write()
gorotine.WG.wait()
fat.Println(“All done !”)