Go-并发

Go是并发式语言,而不是并行式语言,在讨论Go如何处理并发之前需要理解何为并发。

并发是什么?

并发就是立即处理多个任务。举个栗子:当你用手机玩游戏时,女朋友给你发消息了,这时候你就需要来回切,这两件事看起来是同时完成的,我们称之为并发。

并行是什么?

并行指的是同时处理多个任务,看起来和并发差不多,其实完全不同。举个栗子:当你用电脑玩游戏时,女朋友给你打电话过来,这时候你戴上耳机跟女朋友聊天,同时也能继续游戏。

从技术上看并行与并发

假设我们正在编写一个Web游览器,这个游览器有各种组件,其中两个分别是Web页面渲染和下载器,假如我们已经构建好代码,各个组件都是可以相互独立运行的(譬如通过Go中的协程来实现)。当游览器在单核处理时,处理器会在游览器的两个组件间进行上下文切换,它可能在一段时间内下载文件,一段时间内进行页面渲染,这就是并发,并发的进程从不同的时间点开始,分别交替运行。如果游览器运行再多核处理器上,此时下载文件的组件和渲染HTML的组件可能会在不同的核上运行,这称为并行

并行是否一定会比并发快?

这是不一定的,因为在并行运行的组件之间可能会需要互相通信,这时通信开销的成本会比并发系统上的通信开销大很多,所以并行不一定会加快运行速度,这需要根据业务实际场景进行选择。

Go对并发的支持

Go原生支持并发,Go使用Go协程(Goroutine)和信道(Channel)来处理并发。

 

posted @ 2020-05-06 21:39  TrumpC  阅读(129)  评论(0)    收藏  举报