Java多线程之一
一、并发与并行
-
什么是并发?
并发: 指应用能够交替执行不同的任务,如果系统只有一个CPU,同一时刻就只有一条线程指令在执行,但是各个线程指令被快速的轮换执行,这就是的宏观上看起来是多个线程在同时执行。但微观上并不是这样,只是将时间分成若干个片段,多个线程交替执行。
就类似于你,吃一口饭喝一口水,以正常速度来看,完全能够看的出来,当你把这个过程以n倍速度执行时…可以想象一下,吃->喝…如此反复。
-
什么是并行?
并行: 指应用能够同时执行不同的任务,如果系统有1个以上的CPU,则系统的线程有可能非并发而是并行。当一个CPU执行一个线程时,另一个CPU也在执行另外的线程,两个线程互不争夺CPU资源,可以同时进行
就类似于你,吃饭的时候可以边吃饭边打电话,这两件事情可以同时执行
-
两者区别: 一个是交替执行,一个是同时执行.
-
高并发:是指短时间内大量的访问和请求,例如双十一。想系统能够适应高并发状态,则需要全面优化优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……而多线程只是其中解决方法之一。
-
多线程在高并发问题中起到的作用是使计算机资源在每一时刻能达到最大利用率,不至于浪费计算机资源使其闲置。
-
通过多线程实现并发/并行
(1)Thread类定义实现了多线程,通过多线程可以实现并发或者并行。
(2)在CPU比较繁忙资源不足的时候,操作系统只为一个含有多线程的进程分配仅有的CPU资源,这些线程就会自己争夺时间片。这就是多线程实现并发,线程之间争夺CPU资源获得执行机会。
(3)在CPU资源较足的时候,一个进程内的多线程,可以被分配到不同的CPU资源,这就是多线程实现并行。
(4)至于多线程实现的究竟是并发还是并行?前面两点提到的说明这是都有可能的。因为多线程可能被分配到一个CPU内核执行,也可能被分配到不同的CPU资源中执行。然而这个过程是操作系统干的,不关我的事。所以我也不确定最后究竟是并发还是并行。
(5)不管是并发还是并行,都提高了对CPU资源的利用率,最大限度的利用了CPU资源。