实践 Go 工程| 青训营笔记
这是我参与「第五届青训营」伴学笔记创作活动的第 2 天
并发|并行
在单核和单CPU时代,并发和并行就是字面意思。
并发指的是在单处理器系统上线程在微观串行执行,而在宏观并发执行,即
处理器分时复用 多线程交织执行 在特定某个时刻,某一个线程以排他方式独占CPU资源,而在不同时刻,不同的线程占用CPU运行,从而实现在一段时间内同时执行多个线程的表象。
并行指的是在装配多个处理器的并行计算机系统上,将多个线程分配或者指定到不同的处理器上同时执行。
当前早已经进入多CPU(SMP)和多核时代,主流的商用服务器装配多个CPU,即使装配单个CPU,其CPU也拥有多个内核。这使得严格意义的传统并发情况已经不复存在了。面对具有多CPU和多核的计算机体系结构,从上层传软件角度,并发和并行甚至没有本质的区别,都需要挖掘问题或者任务本事固有的并行能力。因此,可以认为并发是一种特殊的并行,或者并行是一种特殊的并发。 在go-携程中通常使用channel进行内存共享 go-channel是一个轻量级携程 通道是用来传递数据的一个结构,可以用于两个goroutine之间,通过传递一个指定类型的值来同步运行和通讯。 chan<- 接收 <-chan发送 在go func()中执行的逻辑 最终结果可能并不理想。这时候就要加锁操作了 sync.Mutex .lock() || .unlock() 加锁 解锁