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