JavaEE 多线程第一节 (进程 线程 并行 并发 概念及关系)

目录

1. 线程与进程的定义与概念

1.1 进程 (Process)

1.2 线程 (Thread)

1.3 进程与线程的关系

2. 并行 (Parallelism) 与 并发 (Concurrency)

2.1 并行 (Parallelism)

2.2 并发 (Concurrency)

3. 并行与并发的关系

4. 进程、线程与并发、并行的关系

        进程、线程、并发、并行之间的对比

        进程、线程、并发、并行之间的关系

5. 小结

6. 面试题目


1. 线程与进程的定义与概念

1.1 进程 (Process)
  • 定义:进程是操作系统中正在运行的一个程序的实例。每个进程都有自己独立的内存空间、系统资源和执行代码。可以简单地认为,一个正在运行的程序就是一个进程。
  • 特征
    • 独立性:进程是系统资源分配的基本单位,每个进程独立运行,互不影响。
    • 资源拥有:进程具有自己独立的地址空间、内存、文件句柄和其他资源,操作系统会为每个进程分配这些资源。
    • 开销较大:由于每个进程都有独立的内存空间,进程之间的切换需要较多的上下文信息,导致较大的系统开销。
1.2 线程 (Thread)
  • 定义:线程是进程中的一个执行单元。一个进程可以包含多个线程,线程之间共享进程的内存空间和资源。线程是程序执行的最小单位,可以独立执行一段代码。
  • 特征
    • 共享资源:同一进程中的所有线程共享进程的地址空间和资源(如内存、文件句柄等),这使得线程之间通信更容易、效率更高。
    • 独立调度:线程是 CPU 调度的基本单位,可以被独立调度和执行,即多个线程可以在多核 CPU 上并行运行。
    • 轻量级:线程相较于进程而言,创建和销毁的开销较小,切换速度更快,因为它们共享进程的资源。
1.3 进程与线程的关系
  • 一个进程可以包含多个线程:每个线程共享进程的内存和资源,可以同时执行不同的任务。例如,在一个浏览器进程中,页面渲染、脚本执行和网络请求可以由不同的线程来完成。
  • 进程是资源分配的单位,线程是调度的单位:操作系统会为每个进程分配独立的内存和资源,而线程是操作系统调度的最小单位,负责实际的执行任务。
  • 多线程提高程序的效率:由于线程共享进程的资源,线程间的通信成本较低,切换速度快。因此,在需要频繁进行并发操作时,使用多线程可以显著提高程序的效率。

2. 并行 (Parallelism) 与 并发 (Concurrency)

并行并发是计算机科学中的两个重要概念,虽然它们看似相似,但实际上有很大的区别。

2.1 并行 (Parallelism)
  • 定义并行是指同时执行多个任务。它通常依赖于多核或多处理器系统,在多个 CPU 核心上真正地同时运行多个线程或进程。
  • 前提:需要硬件支持(多核 CPU、多个处理器)。多个任务可以在不同的 CPU 核心上同时执行。
  • 特点:提高程序的执行效率,减少总执行时间。
  • 举例
    • 你有两只手,分别拿起一支笔,同时在两张纸上写字。这是并行,因为你在同一时刻做两件事。
    • 在多核 CPU 上,多个线程可以在不同的核心上同时执行,这就是并行
2.2 并发 (Concurrency)
  • 定义并发是指在同一个时间段内处理多个任务。但并不一定是同时执行(可以是交替进行)。通过任务切换,使得多个任务都在进行(看起来好像在同时进行)。
  • 前提:不要求多核 CPU,即使在单核 CPU 上也可以通过快速切换任务来实现并发。
  • 特点:通过调度和切换,提高资源利用率,让多个任务都能得到执行。
  • 举例
    • 你有一支笔,不停地在两张纸之间来回切换,先写一会儿A纸,再写一会儿B纸。虽然你看起来是在“同时”写两张纸,但实际上是快速切换在写。这是并发,因为你在同一个时间段内处理了多个任务。
    • 在单核 CPU 上,操作系统可以通过任务调度,让多个线程快速切换执行,从而让用户感觉多个任务都在同时进行。

3. 并行与并发的关系

  • 并行是一种并发:并行是并发的一种特殊形式,特指多任务同时在不同的处理器或 CPU 核心上运行。
  • 并发并不一定是并行:并发是指在同一时间段内处理多个任务,任务可以是交替进行,而不是同时进行。
  • 实际应用
    • 并发编程:即使在单核 CPU 上,也可以通过多线程来实现并发处理,充分利用时间片,提高程序响应能力。
    • 并行编程:在多核 CPU 上,通过多线程、多进程技术可以实现真正的同时运行,从而提高程序的处理效率。

4. 进程、线程与并发、并行的关系

  • 进程与并发:一个进程可以包含多个线程,通过线程的调度可以实现并发。
  • 线程与并行:在多核 CPU 上,多个线程可以真正做到同时执行,从而实现并行。
  • 多进程并行:在多核系统上,可以通过多进程实现并行,每个进程在不同的 CPU 核心上独立运行。
  • 多线程并发:在单核系统上,可以通过多线程快速切换执行,实现并发操作。

进程、线程、并发、并行之间的对比

特性 进程 (Process) 线程 (Thread) 并发 (Concurrency) 并行 (Parallelism)
基本概念 独立运行的程序实例,有独立的内存空间和资源。 进程中的执行单元,多个线程共享进程的资源。 在同一时间段内执行多个任务(交替进行)。 在同一时刻同时执行多个任务(需要多核支持)。
资源拥有 独立拥有自己的资源(内存、文件句柄等)。 共享进程的资源(内存、文件句柄等)。 不直接涉及资源分配,依赖线程或进程。 不直接涉及资源分配,依赖硬件多核支持。
执行方式 每个进程独立运行,进程之间不能共享内存。 同一进程内的多个线程可同时执行(共享资源)。 通过快速切换,任务看起来在同时进行(交替执行)。 任务在多个处理器/CPU 核心上同时执行。
创建和销毁成本 较高,涉及操作系统资源分配和回收。 较低,共享进程资源,切换开销小。 不直接涉及创建,依赖于线程或进程的切换。 不直接涉及创建,依赖于多核处理器的能力。
通信方式 进程间通信(IPC),开销较大。 通过共享内存,通信方便且开销小。 无直接通信,依赖进程或线程实现。 无直接通信,依赖进程或线程实现。
崩溃影响 一个进程崩溃不会影响其他进程。 进程内一个线程崩溃可能影响整个进程。 任务间独立,但调度可能受影响。 任务间独立,资源故障可能影响部分并行任务。
应用场景 操作系统、浏览器、数据库服务等。 多线程服务器、并发网络编程、并行计算等。 多任务处理、IO 密集型任务、多用户交互等。 数据处理、科学计算、大规模图像处理等。

进程、线程、并发、并行之间的关系

项目 关系说明
进程与线程 一个进程可以包含多个线程,线程共享进程的资源。进程是资源分配的单位,线程是执行调度的单位。
进程与并发 多个进程可以通过操作系统调度在同一时间段内交替执行,实现并发。
线程与并发 一个进程中的多个线程可以交替执行,实现并发。即使在单核 CPU 上,也可以通过线程切换实现并发。
线程与并行 在多核 CPU 上,进程中的多个线程可以真正同时执行,实现并行。
并发与并行 并行是一种特殊的并发,指的是在同一时刻同时执行多个任务。并发不一定是并行。

 


5. 小结

  • 进程是资源分配的单位,拥有独立的内存和资源;线程是进程中的执行单元,多个线程共享进程的资源。
  • 并发指在同一个时间段内执行多个任务(可以通过交替进行);并行指在同一时刻同时执行多个任务(需要多核 CPU 支持)。
  • 多线程和多进程都是实现并发和并行的方式。在 Java 中,通常使用多线程来实现并发,充分利用多核 CPU 的能力来实现并行。

6. 面试题目

1. 进程包含线程

         一个进程里面包含一个或者多个线程

2. 同一个进程的线程之间,共同一份系统资源(内存,硬盘,网络宽带),一份内存资源(对象/变量)

3.     进程是系统资源分配的基本单位

        线程是系统调度执行的基本单位

4. 线程是实现并发编程的主流方式多线程有好处,但是不是越多越好

好处:充分利用CPU

过多的坏处: 线程数目达到一定程度, 把多个核心都充分利用之后,如果继续增加线程,则无法提高效率, 甚至可能影响效率, 线程调度也有开销.

5. 多个线程之间可能会相互影响,线程安全问题:一个线程抛出异常,其他线程也会被影响

6. 多个进程之间,一般不会相互影响, 一个程序崩溃了, 并不会影响其他进程

上一篇:C++ 语言特性10 - 委托构造函数


下一篇:make和Makefile-其他: