首页  

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