Golang并发(一)- 并发的介绍

90design · · 253 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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来处理并发执行。

并发属于并行。

更多关于并发、并行的介绍可谷歌百度深入了解。

 

 

 

本文来自:开源中国博客

感谢作者:90design

查看原文:Golang并发(一)- 并发的介绍

253 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传