Go-并发
Go是并发式语言,而不是并行式语言,在讨论Go如何处理并发之前需要理解何为并发。
并发是什么?
并发就是立即处理多个任务。举个栗子:当你用手机玩游戏时,女朋友给你发消息了,这时候你就需要来回切,这两件事看起来是同时完成的,我们称之为并发。
并行是什么?
并行指的是同时处理多个任务,看起来和并发差不多,其实完全不同。举个栗子:当你用电脑玩游戏时,女朋友给你打电话过来,这时候你戴上耳机跟女朋友聊天,同时也能继续游戏。
从技术上看并行与并发
假设我们正在编写一个Web游览器,这个游览器有各种组件,其中两个分别是Web页面渲染和下载器,假如我们已经构建好代码,各个组件都是可以相互独立运行的(譬如通过Go中的协程来实现)。当游览器在单核处理时,处理器会在游览器的两个组件间进行上下文切换,它可能在一段时间内下载文件,一段时间内进行页面渲染,这就是并发,并发的进程从不同的时间点开始,分别交替运行。如果游览器运行再多核处理器上,此时下载文件的组件和渲染HTML的组件可能会在不同的核上运行,这称为并行。
并行是否一定会比并发快?
这是不一定的,因为在并行运行的组件之间可能会需要互相通信,这时通信开销的成本会比并发系统上的通信开销大很多,所以并行不一定会加快运行速度,这需要根据业务实际场景进行选择。
Go对并发的支持
Go原生支持并发,Go使用Go协程(Goroutine)和信道(Channel)来处理并发。

浙公网安备 33010602011771号