一、go特点
- type safe
- goroutine(多线程工作)
线程有独立的寄存器,程序计数器 ,栈(同一个地址空间)
(1)reason for using multi spread to program
- I/O concurrency(并发)
- Parallelism(多核)
- convenience(周期性检查)
discussion
event driven programming(异步)
trigger -> thread
process vs thread address space
线程切换
(2)spread challenges
- 共享内存share memory (JVM)
RACE: n = n+1 (global int) n = n+1
- lock
- not share data
mvlock variable
mv.Unblock
discussion
1.有些指令是atom 有些指令不是
32bit storm -> atomic
microprocessor不一定是atomic
2.private lock
map 内部有一个私有锁
多余的锁开销
两个锁会造成死锁,private不能解决思索
- coordination(线程同步)
- channel
- condition variable sync.cond
- waitGroup
-
Deadlock
image.png
二、go语言编程实例 --- 爬虫
串行代码
image.png
并行代码共享内存
image.png
- waitgroup
- race tracker 不是做静态分析
并行代码channel(channel可以当作一个队列)
image.png
网友评论