Go并发构建模块
所属分类 go
浏览量 861
Concurrency in Go
Chapter 3:Go’s Concurrency Building Blocks
各种并发难题 竞争条件,内存同步,死锁,活锁,饥饿,并发安全验证
CSP Communicating Sequential Processes
并发不是并行 concurrency is not parallelism
Don't communicate by sharing memory , share memory by communicating
goroutine channel select sync包
Goroutine
每个Go程序至少拥有一个 main gotoutine
gotoutine是一个并发的函数
func main() {
go sayHello()
// continue doing other things
}
func sayHello() {
fmt.Println("hello")
}
协程 coroutines
协程是非抢占的并发子程序,不能被中断
协程不能被中断,但是有多个允许暂停和重新进入的点
goroutine的独到之处在于它们与golang的运行环境的深度集成
What makes goroutines unique to Go are their deep integration with Go’s runtime.
var wg sync.WaitGroup
sayHello := func() {
defer wg.Done()
fmt.Println("hello")
}
wg.Add(1)
go sayHello()
wg.Wait()
sync包
内存访问同步原语
使用通道和select ,通过通信共享内存
WaitGroup
安全的并发计数器 Add增加计数 Done减少计数 ,Wait 阻塞等待至计数器归零
Mutex和RWMutex
Mutex mutual exclusion 互斥
Cond
Once
Pool
Channel 通道
select
Go1.5之前,GOMAXPROCS总是设置为1
自后的版本,自动设置为主机上的逻辑CPU数量
runtime.GOMAXPROCS(runtime.NumCPU())
GO 并发递增计数实例
go select 与 定时器
go channel 实例
GO多线程异步处理实例
go程序设计语言01_06入门之并发获取多个URL
上一篇
下一篇
go类型转换和断言
学习GO要了解的几个特性
GO 并发递增计数实例
Go语言atomic原子操作
GO mutex 与 atomic 性能对比
cannot find GOROOT directory