指令级并行,线程级并行,数据级并行区别-程序员宅基地

技术标签: java  

作者:Eureka912
链接:https://www.zhihu.com/question/21823699/answer/111606716
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

进程(processes)与线程(thread)

我们先说个例子:小明的一天

上午:洗脸刷牙,吃早饭,听音乐
下午: 坐公交到公园玩,
晚上:看电视,睡觉

那么对于小明来说,他可以把一天的宏观可以分为:上午,下午和晚上 三个部分。

同理:

对一个程序来说,它分为若干个进程:

参照的例子:某个交互程序

进程 A 用来用户输入
进程 B, 用来处理数据
进程 C. 用来数据输出
打个比方恰好是这三个进程。

进程是操作系统处理一个程序时的抽象。

注意:以上的宏观的角度对吧,上午下午晚上,这个还是太粗略了。process A ,B ,C。对程序来说也是太过于粗略了,接下来我们分的再细一点:


如果我们分的再细致一点,小明的上午继续划分一下,分成是实实在在的小事。

小明的上午:
洗脸刷牙,吃早饭,听音乐

那么对一个程序来说,它的线程就像发生在小明这些实实在在的小事。

线程(对进程而言)= 实实在在的小事

线程1 = 刷牙洗脸
线程2 = 吃饭
线程3 =听音乐
线程4 = 坐公交
……

在这个层面上:

一个程序包含着若干个进程,

一个进程包含着若干个线程。即:

程序>进程>线程 这样的包含关系

理解线程与进程:

每个线程对cpu来说是一个程序的细小部分,就是cpu当前要处理的一件事。

线程是基于进程的抽象,一个进程在系统层面上分析,进程它是由大量的可执行的单元组成,叫做线程(threads) .

上图我用于编辑文档的某个程序,打开任务管理器看到了5个进程。实际上,这些进程又是由许许多多的线程组成。(用户能看得见进程。线程是用户看不见的,但cpu看得见。)


再附张生动形象的图:


图片摘自Wikipedia

因此我们也可以说:进程是线程的在一定时间内有序集合。这些线程对于普通的用户是不可见的,但是是确实存在的。


-----------------------------------分割线-------------------------------------------------------------


并发(Concurreny)与并行(Parallelism)的基本概念
接着继续说并发与并行,这个问题还是交给小明回答吧。

并发:小明可以一边玩手机一边看电视。
但是事实上,他的眼睛在看电视的时候不能看手机,他在看手机没法盯着屏幕,他的眼睛飞快在两个屏幕上切换。

这不是真正意义上的同时进行,但又是客观存在同时进行两件事,这叫并发。

并发= 小明 “一心两用 ” (但不是真正同时进行)

并行: 但是小明可以一天坐公交一边听音乐。
这两件事同时进行互不干扰,做到真正意义的同步同时进行,这叫并行。

并行=小明“一心两用” (真正的同时进行)

理解并发和并行的概念后面的就好懂了

-----------------------------------分割线---------------------------------------------------------------

线程级并发(Thread-Lever Concurrency)
在计算机发展的早期,计算机每次只能运行一个进程,在OS中能拥有资源和独立运行基本单位。因此用户想运行下一个进程必须等上一个进程运行完。比如:你想浏览这个网页就必须关闭上个网页,你想运行这个线程就必须关闭别的。
在1967年迎来的变化,首次在蓝色巨人IBM公司开发的OS /360系统 实现了多线程(Multiprogamming with a Variable Number of Tasks) ,那时候还没有建立线程(thread)的概念,他们称之为任务(Tasks)。

并发与不并发这有什么不同之处呢?

这是第一次实现了并发(Concurrency), 这次并发实现了用户可以运行不同的任务,比如网络服务商可以同时给大量用户提供网页,用户也可以使多个任务并发,比如可以一边上网一边听歌。

对于进程级并发:它不需要cpu的硬件支持,如下图:

操作系统通过上下文切换(process context switch)实现的,必须下图中的p1和p2的之前的进程切换,左边是cpu的时间线。对cpu而言,这两个进程不是同时进行的;对用户而言,由于切换的速度非常快,所以用户觉得是“是同时进行的”。


IBM只是开发了一个系统就改变这么多吗?注意我前面用的词是并发,因为对真正的计算机而言这些任务并不是真正意义上的同步,而是像小明的那个例子。计算机是如何让用户感觉任务同时进行的的呢?

操作系统通过高速的切换不同的线程,仿佛你在同时好多任务一样。

借用一个例子:

就像一个耍杂技的同时把小球扔在空中。

实际上, 玩杂耍的每次手只碰到了一个球,只是看起来就像能同时处理好多球一样的样子。这样的操作系统我们称之为 单处理系统,(A uniprocessor system is defined as a computer system that has a single central processing unit that is used to execute computer tasks)


------------------------------内分割线-----------------------------------------------------------------

线程级并行(Thread-Lever Parallelism)
虽然IBM实现了并发,但这对cpu而言并不是真正意义上的同时进行,只是让它的效率更高而已,因此人们期望能同时处理多个线程,实现线程的并行。自从1980s开始,系统开发人员也就已经发出了多处理系统Multiprpcessor system,由单一的操作系统核心控制的多进程的系统。cpu的晶体管也遵循摩尔定律高速发展。
但问题是——依旧不能同时处理多个线程,仅仅提高单核芯片的速度会产生过多热量且无法带来相应的性能改善,也永远不能实现真正意义上的同时处理多任务。
比如2000年,奔腾四,使用了英特尔发布最新的NetBurst架构,按预测,奔腾四在该架构下,最终可以把主频提高到10GHz,但是更高的主频却带来了功耗增加,使其性能上反而还不如早些时推出的产品(摘自百度百科)
英特尔和AMD也意识到,当主频接近4GHz时,速度也会遇到自己的极限:那就是单靠的主频提升,已经无法明显提升系统整体性能。
因此迫切需要一个能支持同时处理2个线程以上的处理器,来提升CPU的瓶颈。
需求推动了技术,线程级并行应运而生。主要由下面两种技术的支撑:

超线程技术(Hyper-Threading,简称HT) --虚拟内核

2004年,奔腾4实现了Hyper-Threadin
2004年,奔腾4实现了Hyper-Threading.(单核心双线程)

超线程技术实现了单个物理核心同时两个线程,也就是别人常说的虚拟内核数。比如单物理核心实现的双线程,它同时可以处理两个线程,它的物理核心数其实是是1个,通过Hyperthreading实现的线程级并行( Thread Lever Parallelism)

多核技术--物理核心
2005年,英特尔宣布他的第一个双核心 EM64T 处理器,和 Pentium D840(次年发布,双核心双线程,蹩脚双核)
2006年,Core 2(双核心双线程,但不支持HT技术)这大概才算真正意义上单芯片多核心处理器的诞生。(物理双核)

而后迎来了 Multi-Core Processor 多内核处理器时代,而且伴随着多线程技术。也就常说的几核几线程。核一般指的是物理核心的数目,线程是计算机能同时进行的线程。

在1960s :通过操作系统已经实现了线程级并发(虽然那个时候还没建立线程的概念。)
这种方式依赖操作系统,频繁的上下文切换意味损失了cpu的处理效率。
科学需要一代又一代人的努力吧。但直到2000年随着CPU的技术突破以后,从1960s到2000s年前后花了50多年的时间,才实现和更高级的线程级并行。


比如拥有Core i7的每个核心有带着HP技术,可以同时处理2个线程。而i7有4个物理核心,因此能4x2=8线程并行。非常流弊啊!

附上core i7的架构示意图:(图片摘自网络)


线程级并行的好处:
1.当运行多任务时,它减少了之前的模拟出来的并发,那么用户进行多任务处理时可以运行更多的程序进行并发了。
2.它可以使单个程序运行更快。(仅当该程序有大量线程可以并行处理时)

------------------------------------分割线-----------------------------------------------------------------

指令集并行 Instruction-Level Parallelism
指令集的是更低层次的概念。
计算机处理问题是通过指令实现的。在1978年的 Intel 8086 处理器都只能一次只能单指令。 Intel首次在486芯片中开始使用:当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行。 指令集并行基于流水线(pipeline)技术


这个只言片语很难解释清楚,我举个例子可能会好点。

顾客A(指令1),顾客B(指令2)这A、B两个顾客准备去洗车。

而洗车的标准流程是: ①检查工作 ②撤掉脚垫清洗干净 ③预洗 ④用水枪冲洗车身 ⑤上洗车液 ⑥涂抹。。后面略


洗衣店可以有两个方案:


方案一:

洗车店让A先洗完,A走完整个洗车流程。

再让顾客B去洗,B走完整个流程。 这个效率很低吧!!!!


方案二:

洗车点让A先进流程①,

等A到了流程②,立马让顾客B开始流程①

等A到了流程③,立马让顾客B开始流程②

………依次往复 这个效率很高吧!!!

方案二有点像什么?像车间的流水线。 指令1和指令2,实际上不同指令,但是正式因为他们可以互不干扰,因此可以这么执行。


数据级并行 Multiple-Data parallelism

这是最低的层次。

大型机需要进行科学计算,为了更快的处理数据,它们使用了更多的寄存器,同时可以处理更多的操作数。
单一指令运行多个操作数并行计算。
我们考虑下面这个程序:(a+b)*(c+d)

该计算过程被分解为:
1. e = a +b
2. f = c +d
3. m = e * f
早期的计算机一次只能处理一条指令,它要先算1,再算2,最后算3。需要三步(花费三个指令)得到答案。
我们观察:3的结果依赖于1和2,而1和2都单纯的加法操作,所以开始想办法让它们同时计算,cpu只要两步得到答案,1和2一次算出来,进行乘法运算。它运用了SIMD(Single -Instruction ,Multple -Data)单指令多数据流技术。一个指令执行了(a,b,c,d) 4个操作数。SIMD指令集可以提供更快的图像,声音,视频数据等运行速度。


评论区有人认为这个是指令集并行,显然把这三个步骤看成三个指令了。注意这三个步骤,,经过编译器分析处理成汇编语言,如果支持数据并行的话,它可以被整理成我们逻辑分析的那样,只需一条指令就执行出来了。(当然不支持的话只能当成三个指令去执行了)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/songwenbinasdf/article/details/78488681

智能推荐

react-native如何动态引用本地图片_react native 本地图片-程序员宅基地

文章浏览阅读1.6k次。最近很多人都在问如何去动态的加载本地图片,因为rn自带的require是不能拼接路径的。下面来教大家如何:1.新建一个项目,新建一个图片文件夹,如下所示:2.创建一个js文件,引入图片,输出模块:3.引用文件,并开始拼接:项目地址:GitHub - lvao813/img-demo这个只是一种封装的思想,希望能给大家带来启发。作者:目标全栈链接:https://www.jianshu.com/p/9612b5608183来源:简书著作权归作者所有..._react native 本地图片

SAP Fiori 应用无法根据 contact 字段搜索的原因分析_sap 2000 unable to find-程序员宅基地

文章浏览阅读1.1k次。Issue description: account 4024555 下面挂了一个contact 4098335:但是在Fiori ui上,根据Thompson搜索不出这个contact出来:Debug后台逻辑:Search bar里输入的Thompson作为substringof的参数传到后台,按照fullName搜索:https://sap.corp:4080/sap/opu/od..._sap 2000 unable to find

How to achieve conditional break point in your ABAP program_conditional breakpoint the left-hand side-程序员宅基地

文章浏览阅读243次。Background有不同的同事问我这个问题:例如LOOP要执行1000次,我只对其中的某一次比如第501次循环感兴趣,我肯定不可能按500次F5.或者我只对 LOOP里某个变量为某一个具体值的那一次循环感兴趣。如果避免重复按F5, 而是让断点直接停在我想停的condition上面?其实有三种方法实现。Line 15 will be executed 1000 times. And we ..._conditional breakpoint the left-hand side

干货丨什么是SOA架构?SOA架构有什么作用?-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏3次。针对传统的单体架构存在的问题,后来出现了一种SOA架构。SOA架构是一个面向服务的架构,它是一个组件模型。SOA架构将应用程序的不同功能单元(称为服务)进行拆分,并通过在这些服务之间定义良..._soa架构

OpenCASCADE:建立Body_brepbuilderapi_makeface-程序员宅基地

文章浏览阅读741次。OpenCASCADE:建立BodyOpenCASCADE:建立Body棱镜轮廓应用圆角添加颈部创建空心实体OpenCASCADE:建立Body棱镜轮廓要计算瓶子的主体,您需要创建一个实体形状。最简单的方法是使用先前创建的轮廓并沿一个方向扫描它。Open CASCADE Technology的Prism功能最适合该任务。它接受一个形状和一个方向作为输入,并根据以下规则生成一个新的形状:您当前的个人资料是一条线。参考 Shape/Generates 表,您需要根据其线计算面以生成实体。要创建人脸,_brepbuilderapi_makeface

006 - 编译 QtWebEngine_编译qtwebengine-程序员宅基地

文章浏览阅读4.2k次。编译 QtWebEngine文章目录编译 QtWebEngine前言源码下载编译安装编译过程中可能遇到的问题参考文档前言在之前的文章《Linux 安装 Qt》中,我说了一句 QtWenEngine 模块不好编译,暂时用不到就不管,可没想到苍天饶过谁,这么快就需要用 QtWenEngine 了,能怎么办,编呗,接着编……源码下载之前的 qt 源码里面有 webengine 的源码编译安装根据官方文档,先安装依赖库;根据官方推荐安装的,咱也不知道对不对,主要是这玩意太难编译了,就宁可多装一千,不能_编译qtwebengine

随便推点

软考高级五大证书,哪个更值得考?_软考高级证书有哪些-程序员宅基地

文章浏览阅读1.6w次。软考高级有这五个证书:信息系统项目管理师、系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师。只是专业方向不同,但是产生的作用都是一样的,具体的作用有升职加薪,职称评定,抵扣个税,还有积分落户等。所以没有更值得,只有更适合自己的科目,建议在学习备考有一些疑惑的友,加一些学习群,可以及时解决,也可以看到大家的学习进度,有兴趣的可以来企鹅群:423914346在纠结选什么高级科目的友,一起来看:..._软考高级证书有哪些

【Deep Linking】:从浏览器调起 APP_s.browser_fallback_url 没有作用-程序员宅基地

文章浏览阅读1.9k次。Deep Linking 只是一个概念, 是指通过一个链接进入另一个网站/App,并直接浏览其内部的某个页面。 Deep Linking 给用户带来的是非常顺滑的浏览体验,尤其在 Web 世界中 Deep Linking 的实现非常容易。但如果要进入 App 并定位到对应的页面则较为困难,URI Scheme, Universal Links, Android App Links, 以及 Chro_s.browser_fallback_url 没有作用

UE4学习-AI导航网格的创建及修改_unreal 导航网格编辑-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏7次。文章目录_unreal 导航网格编辑

SAP Spartacus的Structured data_set-structured data.-程序员宅基地

文章浏览阅读399次。https://sap.github.io/spartacus-docs/structured-data/Structured Data provides a data structure for the web that makes the web content more understandable for web crawlers. With only HTML structure, a web page provides insufficient understanding of the co_set-structured data.

SAP ABAP BOR type-程序员宅基地

文章浏览阅读517次。Created by Wang, Jerry, last modified on Jan 06, 2017You might have observed that in both settype and relationship metadata table, there are type BUS1178 maintained. What is it?It is BOR type for ..._abap bor

PASCAL VOC Challenge_【pascal voc】ascalvocchallenges-程序员宅基地

文章浏览阅读1.2k次。http://grunt1223.iteye.com/blog/970449在计算视觉的领域中,Pascal VOC Challenge 就好比是数学中的哥德巴赫猜想一样。Pascal的全称是Pattern Analysis, Statical Modeling and Computational Learning。每年,该组织都会提供一系列类别的、带标签的图片,挑战者通过设计各种精妙的算_【pascal voc】ascalvocchallenges

推荐文章

热门文章

相关标签