Java 语言特性【一】——JUC(Java 并发工具包)

首先介绍一下,进程、线程、并发和并行,这几个名词是计算机系统中的重要概念。

进程和线程

进程

进程是计算机科学中最重要和最成功的的概念之一,是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。而并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的。在大多数系统中个,需要运行的进程数是多余可以运行他们的CPU个数的。传统系统在一个时刻只能执行一个程序,而现今的多核处理器同时能够执行多个程序。无论是在单核还是在多核系统中,一个CPU看上去都像是在并发地执行多个进程,这是通过处理器在进程间切换来实现的。操作系统实现这种交错执行的机制成为上下文切换。为简化讨论,只考虑包含一个CPU的单处理器系统的情况。在任何时刻,单处理器系统都只能执行一个进程的代码。当操作系统决定要把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程的上下文、恢复新进程的上下文,然后将控制权传递到新进程。新进程就会从他上次停止的地方开始。从一个进程到另一个进程的转换是由操作系统内核管理的。内核是操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,比如读写文件,他就执行一条特殊的系统调用指令,将控制权传递给内核。然后内核执行被请求的操作并返回应用程序。注意,内核不是一个独立的进程。相反,它是系统管理全部进程所用代码和数据结构的集合。实现进程这个抽象概念需要地基硬件和操作系统软件的秘密合作。至于应用程序是如何创建和控制它们进程的此处不作展开,仅仅对进程这一概念有一个宏观的认识先。

线程

尽管通常我们认为一个进程只有单一的控制流,但是在现代系统中,一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。由于网络服务器中对并行处理的需求,线程成为越来越重要的编程模型,因为多个线程之间比多个进程之间更容易共享数据,也因为线程一般来说都比进程更高效。当多个处理器可用的时候,多线程也是一种使得程序可以运行的更快的方法,这又涉及到另一个概念,并发。

并发和并行

数字计算机整个历史中,有两个需求是驱动进步的持续动力:一个是我们想要计算机做得更多,另一个是我们想要计算机运行的更快。当处理器能够同时做更多的事情时,这两个因素都会改进。

并发(concurrency)

并发是一个通用的概念,是指一个同时具有多个活动的系统

并行(parallelism)

并行是指用并发来使一个系统运行得更快。并行可以在计算机系统的多个抽象层次上运用。按照系统层次结构中由高到低的顺序重点强调三个层次:线程级并发、指令级并行、及单指令、多数据并行,同样不作扩展。

下图是简书转载的,便于直观感受。(https://www.jianshu.com/p/cbf9588b2afb)

高并发和多线程

高并发和多线程”总是被一起提起,给人感觉两者好像相等,实则 高并发 ≠ 多线程。

多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现。

猜你喜欢

转载自www.cnblogs.com/yadongliang/p/12316893.html