Go并发构建模块  
   
所属分类 go
浏览量 1241
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