并发?还是并行?
并发编程不是一个新的概念,但是随着科学技术的发展,多核危机的出现也让并发编程的话题一度成为热门,支持并发也并不是Java语言的独特优势,还有很多优秀的语言,Erlang,Golang,Scala这些语言也能很好的支持并发编程,学习多线程这一块知识也是一个初级程序员成长的必经之路。 正所谓基础不牢,地动山摇,在学习JavaSE部分的知识只有打好基础,才能为后面的学习做好铺垫,这里引出一个问题。 并发?还是并行? 很多情况下容易把并发和并行搞混淆,但实际上一字之差也是有很大差距的。引用一句经典描述: 并发是问题域中的概念,指同一时间应对(dealing with)多件事情的能力; 并行是方法域中的概念,指同一时间动手做(doing)多件事情的能力。 其实从这句话我们也可以看出来,并发侧重于完成事情的主体是单个的,在某一个时刻内只能完成一件事情,但是又可以几乎同时的处理多件事情;而并行是可以有多个主体去完成多个事情,在同一时刻,可以处理不同的事情。 这里引用大师讲的一个生活中的例子来说明并发和并行。 我的妻子是一位教师,与众多教师一样,她善于处理多个任务,他虽然每次只能做一件事情,但是可以同时处理多个任务。 比如,在听一位学生朗读的时候,它可以暂停学生的朗读,维持课堂秩序,或者回答学生的问题,这是并发但不是并行, 因为只有她一个人,某一个时刻只能进行一件事情。 但是假如她有一位助教