golang 并发

golang 的并发编程范式

并行:程序在任意时刻都是同时运行

并发:程序在单位时间内是同时运行(避免阻塞、分时操作)

 

go 并发执行体称为goroutine

 

go语言 通过 go 关键字来启动一个goroutine.(go的后面必须跟一个函数)

go func() {

      ......

}

 

goroutinue有如下特性:

1. go的执行是非阻塞的,不会等待

2. go后面的函数的返回值会被忽略

3. 调度器不能保证多个goroutine的执行次序

4. 没有父子goroutine的概念,所有的goroutine是平等的被调度和执行

5. go程序在执行时会单独为main函数创建一个goroutine,遇到其它go关键字时再创建其它的goroutine

6. go没有暴露goroutine id给用户,所以不能在一个goroutine里面显示地操作另一个goroutine,但runtime包提供了一些函数访问和设置goroutine的相关信息

 

goroutinue间需要通信、同步、协同

go通过通信来共享内存的载体是chan(通道)

chan中可以存储goroutinue产生的数据

ch := make(chan int, 10)

ch <- rand.Int()    // 通道写入

<-ch    // 通道写出

 

goroutines 工作线程池

 

select 扇入扇出(fan in、fan out)

posted @ 2022-07-25 17:10  wangssd  阅读(40)  评论(0编辑  收藏  举报