Java并发编程之美
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 并发编程的其他基础知识

2.1 什么是多线程并发编程

首先要澄清并发和并行的概念,并发是指同一个时间段内多个任务同时都在执行,并且都没有执行结束,而并行是说在单位时间内多个任务同时在执行。并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行。在单CPU的时代多个任务都是并发执行的,这是因为单个CPU同时只能执行一个任务。在单CPU时代多任务是共享一个CPU的,当一个任务占用CPU运行时,其他任务就会被挂起,当占用CPU的任务时间片用完后,会把CPU让给其他任务来使用,所以在单CPU时代多线程编程是没有太大意义的,并且线程间频繁的上下文切换还会带来额外开销。

图2-1所示为在单个CPU上运行两个线程,线程A和线程B是轮流使用CPU进行任务处理的,也就是在某个时间内单个CPU只执行一个线程上面的任务。当线程A的时间片用完后会进行线程上下文切换,也就是保存当前线程A的执行上下文,然后切换到线程B来占用CPU运行任务。

图2-1

图2-2所示为双CPU配置,线程A和线程B各自在自己的CPU上执行任务,实现了真正的并行运行。

图2-2

而在多线程编程实践中,线程的个数往往多于CPU的个数,所以一般都称多线程并发编程而不是多线程并行编程。