并发?还是并行?

安稳与你 提交于 2020-04-07 20:42:27

并发编程不是一个新的概念,但是随着科学技术的发展,多核危机的出现也让并发编程的话题一度成为热门,支持并发也并不是Java语言的独特优势,还有很多优秀的语言,Erlang,Golang,Scala这些语言也能很好的支持并发编程,学习多线程这一块知识也是一个初级程序员成长的必经之路。
正所谓基础不牢,地动山摇,在学习JavaSE部分的知识只有打好基础,才能为后面的学习做好铺垫,这里引出一个问题。

并发?还是并行?

很多情况下容易把并发和并行搞混淆,但实际上一字之差也是有很大差距的。引用一句经典描述:

  • 并发是问题域中的概念,指同一时间应对(dealing with)多件事情的能力;
  • 并行是方法域中的概念,指同一时间动手做(doing)多件事情的能力。

其实从这句话我们也可以看出来,并发侧重于完成事情的主体是单个的,在某一个时刻内只能完成一件事情,但是又可以几乎同时的处理多件事情;而并行是可以有多个主体去完成多个事情,在同一时刻,可以处理不同的事情。

这里引用大师讲的一个生活中的例子来说明并发和并行。

我的妻子是一位教师,与众多教师一样,她善于处理多个任务,他虽然每次只能做一件事情,但是可以同时处理多个任务。
比如,在听一位学生朗读的时候,它可以暂停学生的朗读,维持课堂秩序,或者回答学生的问题,这是并发但不是并行,
因为只有她一个人,某一个时刻只能进行一件事情。

但是假如她有一位助教,那么她就可以回答学生问题,而同时助教可以聆听朗读,这种方式既是并发,也是并行。

其实类比起来,就好比操作系统中的单核并发处理和多核并行处理,不管是并发还是并行,不得不说都要比传统的串行执行模型更为优秀。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!