后端开发

go并发实现协程

并发实现:协程

启动协程

多核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 !”)



go