在学习多线程高并发之前,我们需要搞懂以下名词概念:
并发:
并发的关键是你有处理多个任务的能力,不一定是同时处理。比如你正吃着饭,然后放下筷子去打电话。
并行:
并行的判断条件就是同一时间点能处理多个事件。比如边吃饭边打电话。并行需要两个或者两个以上的线程跑在不同的处理器上。
并发&&并行
单CPU中进程只能是并发,多CPU计算机中进程可以并行。
单CPU单核中线程只能并发,单CPU多核中线程可以并行。
进程:
进程是正在运行的程序的实例,进程是一个具有一定独立能力的程序关于某个数据集合的一次运行活动。
线程:
线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。线程是进程中的执行单元。
同步&&异步:
同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。
临界区:
临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用他,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。进入线程阻塞队列。
阻塞&&非阻塞:
阻塞和非阻塞通常被用来形容多线程间的相互影响。当一个线程占用了临界区资源,那么其它需要使用这个资源的线程都必须在这个临界区上等待。等待会导致线程挂起,这样就形成了阻塞。如果占用资源的线程一直没有释放资源,那么其它的线程在这个临界区上都不能继续工作。相反,非阻塞表明多个线程之间的执行是不会相互影响的。通常,我们使用synchronized关键字,ReentrantLock(重入锁)时,我们得到的线程就是阻塞线程。阻塞线程在执行代码前,都会尝试得到临界区资源的锁,如果得不到,线程就会一直挂起,直到临界区资源释放。