很多人不是特别明白并发编程和并行编程的区别所在,有很多人很容易搞混淆,觉得二者近似相等,本文将用几个浅显易懂的例子,来说明一下什么是并发和并行。
1、任务与多任务
关于什么是进程,什么是线程,这里不打算多说,关于每一种开发语言的多线程处理技术语法上有所区别,原理很多类似,可以查阅相关的参考书。什么是任务呢?其实很简单,在我们生活中,比如我今天要学一首歌,要在操场上散步1000米,然后还要向老师电话汇报研究成果,这是今天的三个任务。在编程语言中,实现某一个任务的一般单元就是“函数”。
2、顺序执行
上面三个任务,如果在一般的单线程执行的程序里面,分别定义三个函数,然后依次顺序执行,即执行完第一个在执行第二个,然后执行第三个,即我先把一首歌学会,然后在操场上散步1000米,然后再给老师汇报,这样做效率低下。我们可以有一个更加高效的办事方法,我在散步的时候,顺便打电话给老说汇报一下今天的成果,然后边散步边听歌,便跟着学,这样效果就高很多,这里的是“并行执行”。
3、并发和并行的一些理解——concurrency and parallellism
并发和并行都是完成多任务更加有效率的方式,但还是有一些区别的,并发(concurrency),并行(parallellism),可见他们的确是有区别的。下面通过一些具体的例子进行说明。
例子一:
例子二:
理解:
并发和并行的意义:
4、CPU的时间观
为什么要进行“并发、并行、多任务、多线程、异步”等等相关的一些操作,就是为了充分利用CPU的巨大潜能,因为很多任务是需要时间的,比如文件的读写、网络数据流的下载等等,如果让CPU处于一个闲置状态,不充分利用它,程序的效率就很低。
站在CPU的角度而言,我就是全心全意搞计算的,你却让我闲着没事干,在我的心里,等待的时间就异常漫长。下面是CPU所谓的时间观:


由此可见,站在人类的角度而言,重启一次也就等了5分钟,还可以接受,可是对于CPU而言,它却感觉等了25000年,这是多么漫长的等待,25000年不做事情,太煎熬了。
5、下面是我推荐的两本关于多任务,并发并行编程的书籍,一本是基于,NET语言的,一本是基于Python语言的。


发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207511.html原文链接:https://javaforall.net
