并行VS并发
并发指的是多线程在一个CPU上运行,而并行是直利用多核来实现多线程。
内核是系统里比较昂贵的系统资源,它的创建、切换停止都是很重的系统操作,而协程可以理解为轻量级的线程
Goroutine
在一个函数前加上go关键字就能为一个函数创建一个协程来运行
正因为Go协程有这种调度机制,所以我们开篇那个例子,循环并不会等待打印操作执行完再创建下一个协程,而是直接进行下一个循环,立刻创建新协程,一共创建了10个协程。而这10个协程的调度时机又是不确定的,所以打印的所以我们也没有办法确认最终的打印顺序。
Goroutine上
Goroutine下
CSP
Channel
这是一个引用类型。
无缓冲通道就是同步通道,解决同部问题的方式就是使用有缓冲通道
这个是并发安全的,什么是并发呢
CPU在同一时间只能运行一个任务,只是多个任务之间切换的速度较快,我们看起来好像是同时在运行的,这个就叫做并发。而并行则是完完全全在同一时刻,能够执行多个任务。在多核CPU的时代,我们就可以做到并行。
由于生产者速度快,消费者速度慢,因此利用带缓冲的队列,就能同步。
通道make的第二个参数
并发编程
并发安全Lock
WithGroup
先开启五个协程就add(5)然后在每个子协程结束后调用Done()方法减1, 最后用wait方法达成阻塞。
Go依赖管理
GoPath
Go Vendor
Go Module
commit第二部分是一个时间戳,后面是12位的哈希码的前缀。
没有直接依赖的话会标识出来
标识出来可能会存在不相容的代码逻辑。
依赖分发-回源