串行和并行的区别_计算机基础笔记:64位、进程、线程、并行、并发

这是玩转ArcGIS Pro的第 60 篇文章

dbafa7c81f7d05e59d87827b6dcba950.gif在说Pro的性能时,经常提到64位,多线程,对这些计算机基础内容做了个总结。

32位和64位系统

32 位程序因为虚拟内存地址只有 32 位,理论上最多只能使用约 4GB内存(2的32次方),而 64 位程序的虚拟内存地址有 64 位,实际可用 48 位,这就允许程序理论上最多使用 256TB 内存。这也就意味着,程序要想使用超过 4GB 的内存,就只能选用 64 位版本。

ArcMap的后台64位

ArcMap的GP工具之前都是前台运行的,也就是有个对话框显示工具运行的进度,这时只能等待工具运行结束后才能做其他事,比如查看地图等操作。由于 ArcMap 和 ArcCatalog 是 32 的程序,单进程使用的系统资源是有限的。为了解决这些问题,后台地理处理就产生了,从 ArcGIS 10.0 之后的版本,后台地理处理一直存在着。

有了后台处理,相当于在后台开了一个没有界面的ArcMap,在后台中多了两个RuntimeLocalServer的进程。安装了后台64位补丁后,替代了原先的常规 32 位后台处理。在内存 容量较大的系统中,使用 64 位后台处理,有助于处理在 32 位环境中无法处理的大数据。由于所有执行工作都在原生 64 位空间中完成,因此可使用更多系统资源。

CPU和GPU

Graphics Processing Unit,中文翻译为图形处理器。GPU这个概念是由Nvidia公司于1999年提出的。GPU是显卡上的一块芯片,就像CPU是主板上的一块芯片。GPU是专为执行复杂的数学和几何计算而设计的,这些计算是图形渲染所必需的。

e7f6c191d5bb1720121db829ca9b23b0.png

GPU一开始仅用于图形渲染,此功能是GPU的初衷,从名字中就可以看出来。后来人们发现,GPU这么一个强大的器件只用于图形渲染太浪费了,它应该用来做更多的工作。由于在浮点运算、并行计算方面出色能力,现在GPU的应用场景已经涵盖了深度学习,视频处理,科学计算,图形可视化等。

在没有GPU之前,基本上所有的任务都是交给CPU来做的。有GPU之后,二者就进行了分工,CPU负责逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务(大规模计算任务)。

单线程和多线程

线程,简单的说就是处理事务的任务链,当只有一条链,所有的事情都在这一条链上执行时,那就是单线程。缺点是当执行某个耗时或者不能立即完成的任务时,该线程就会暂时停止对其他任务的响应和处理,造成的视觉效果就是程序的“假死”,也就是应用程序被卡在那里无法继续执行。当有多条链时,那就是多线程了,当然并不是说多条线同时运行,而是说有一条主线程,处理整个程序任务的主方向的链,而其链上又有许许多多的分支,就像树枝那样,这样,既有了主线程去处理那些主要任务,又有了那些细小线程去处理耗时费力任务,从而让界面看起来更加流畅。

进程和线程的关系

说到线程,不得不提到进程。一个任务通常就是一个程序,每个运行中的程序就是一个进程。 当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。

75d0e47e7c5909b46c18067bfaeaeaf4.png

当在电脑上打开一个foxmail,开启了一个进程,打开一个浏览器,开启了一个进程。当使用foxmail的时候,收邮件是一个线程,发邮件是一个线程,写邮件又是一个线程。这几个线程同时为进程Foxmail工作,完成Foxmail的全部功能。

进程有3个特征:独立性,动态性和并发性。

  • 独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接就访问其他进程的地址空间。 

  • 动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。在进程中加入了时间的概念。进程具有自己的生命周期和各种不同的状态,这些概念在程序中都是不具备的。 

  • 并发性:多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。并发性(concurrency)和并行性(parallel)是两个不同的概念。并行指在同一时刻,有多条指令在多个处理器上同时执行;并发指在同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行(纳秒级),使得在宏观上具有多个进程同时执行的效果。 

并发和并行

Erlang 之父 Joe Armstrong 用一张5岁小孩都能看懂的图解释了并发与并行的区别。

9bb9f77c244bcf5a23aca27ba6d857d6.png

并发是两个队列交替使用一台咖啡机。

并行是两个队列同时使用两台咖啡机。如果串行,一个队列使用一台咖啡机,那么哪怕前面那个人出去接电话了,后面的人也只能死等着他回来才能去接咖啡,这效率无疑是最低的。

再看另外一个例子:

并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干端,使多个进程快速交替的执行。

c4f7529eebd699f3e3a0f1ad3e649dff.png

如上图所示,并发就是只有一个CPU资源,程序(或线程)之间要竞争得到执行机会。图中的第一个阶段,在A执行的过程中,B、C不会执行,因为这段时间内这个CPU资源被A竞争到了,同理,第二阶段只有B在执行,第三阶段只有C在执行。其实,并发过程中,A、B、C并不是同时进行的(微观角度),但又是同时进行的(宏观角度)。

并行(parallellism):指在同一时刻,有多条指令在多个处理器上同时执行。

382419a349bc6f86a7fa48c455aab366.png

如图所示,在同一时刻,ABC都是同时执行(微观、宏观)。

  • 在CPU比较繁忙,资源不足的时候(开启了很多进程),操作系统只为一个含有多线程的进程分配仅有的CPU资源,这些线程就会为自己尽量多抢时间片,这就是通过多线程实现并发,线程之间会竞争CPU资源争取执行机会。

  • 在CPU资源比较充足的时候,一个进程内的多线程,可以被分配到不同的CPU资源,这就是通过多线程实现并行。

  • 不管并发还是并行,都提高了程序对CPU资源的利用率,最大限度地利用CPU资源。

另一个例子:

串行:喂?你在做什么呢?买菜啊?好的,到家了说一声。啊?到家了?那你到幼儿园接娃吧。

串行的特点:前一个任务没搞定,下一个任务就只能等着。

并行:来,这是你的盖浇饭,这是我的胡辣汤。咱俩一起吃。

并行的特点:两个任务在同一时刻互不干扰的同时执行。

并发:你去买个菜,顺路把邮件发了;路过幼儿园时带娃回家。

并发的特点:同时安排若干个任务,这些任务可以彼此穿插着进行;有些任务可能是并行的,比如买菜、发邮件和去幼儿园的某些路途是重叠的,这时你的确同时在做三件事;但进菜市场和发邮件和接娃三者是互斥的,每个时刻只能完成其中一件。换句话说,并发允许两个任务彼此干扰。

要点:串行还是并发,这都是任务安排者视角看到的东西。前者要求你看到前一个任务结束了,下一个任务才能安排;而后者呢,你可以同时提交许多任务,执行者(们)之间会相互协调并自己安排执行顺序(但未必合理,比如可能出现死锁)——总之,你把任务安排下去就不用管了。

典型案例:你买了个新硬盘,打算把自己的重要文件复制过去。于是你找到music目录,把所有的音乐文件夹选中,复制50G音乐到新硬盘;然后打开photo目录,把100G照片复制到新硬盘;又打开mov目录,把800G视频复制到新硬盘……最后,你看到Windows显示了10个文件复制窗口;其中一个窗口的提示是“还有一千六百个文件待复制,需要三天零八小时七分钟三十二秒”。

这就是典型的“并发”任务。

在这个场景里,你同时启动了10个文件复制进程,帮你复制十大类文件。

如果没有“并发”支持,你只能先复制一个文件夹,等上半小时,看它复制完了才能继续复制下一个。这当然很累人。

一旦有了并发支持,你就能同时启动十个复制任务。在计算机忙碌的同时,你完全可以出去旅个游……

但是,细心的你可能会注意到:如果这十个文件复制任务没有分成十个进程去做,而是写个批处理甚至干脆用Linux的dd命令全盘复制,那么复制完所有文件只需五六个小时。

这是因为,十个进程会彼此争抢资源;而每次进程执行权切换,硬盘就不得不重新寻道——这是非常非常浪费时间的。

其结果,就是把本来五六个小时就能搞定的事情,争抢成了三天都搞不定……

换句话说,这里面没有并行,只有并发。

说的更清晰点,对电脑操作者,你的确是“并发”了十个任务;但对程序这个执行者来说,它们仍然是“串行”使用硬盘——进程1用200ms,交出控制权;换进程2用200ms硬盘,交出控制权;然后是进程3、4、5、6、7……它们只是快速切换执行权、从而让你得到了一个“同时执行”的假象而已。

因此,对这类任务……其实你还是自己写个批处理更好。节省你的生命,也节省硬盘的使用寿命。

参考:

32位和64位:

https://www.zhihu.com/question/284605369/answer/439193756

ArcMap后台64位:

http://zhihu.geoscene.cn/article/101

CPU和GPU的关系:

https://www.zhihu.com/question/28422454

单线程和多线程:

https://www.jianshu.com/p/7d9686cfcfbf

并行和并发:

https://www.zhihu.com/question/33515481

线程、进程、并行和并发:

https://blog.csdn.net/why15732625998/article/details/79625556

7d8d42d4f39eb443f36f80cf1bafcc23.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值