People can only lose when they give up fighting, so long as they insist on fighting, they will not lose.
人,只有在放弃战斗的时候才算输,只要坚持战斗,就还没输。
Golang是并发语言而不是并行语言。
那么并行和并发有什么千丝万缕的关系的呢?
什么是并发,并行?
并发就是一次性做大量的事情的能力。
1. 解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
例如: 每天早上10分钟我洗脸,刷牙,吃早饭等等很多事情,这就是并发。 我一边刷牙的同时在烧水做饭这就是并行。
并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。
2. 解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
3.解释三:在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群
所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。
用技术的层面来说明:
假如一个web网页中有视频播放和文件下载两个动作,当浏览器在单核的处理器下运行时, CPU核心会在这两个事件中来回切换,(同时)播放视频和下载,这就称为并发。并发进程在不同的时间点开始并有着重叠的执行周期。
在肉眼上感知到的是同时的。
假如你的CPU是多核处理器,那么下载和播放会在不同的CPU核心同时执行,这就是并行。
并行并不一定使执行时间更快。这是因为并行运行的组件可能必须相互通信。例如,在我们的浏览器中,当文件下载完成时,应该将它传递给用户,比如使用弹出窗口。这种通信发生在负责下载的组件和负责呈现用户界面的组件之间。这种通信开销在并发系统中很低。当组件在多个内核中并行运行时,这种通信开销很高。因此并行程序并不一定使执行时间更快!
Go支持并发
在Golang中使用goroutine和channel来处理并发执行。
并发属于并行。
更多关于并发、并行的介绍可谷歌百度深入了解。
有疑问加站长微信联系(非本文作者)