Java并发篇_进程&线程

Java
302
0
0
2022-12-19
标签   Java并发
一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。

一、进程

1、什么是进程

进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

2、进程的特点

  • 进程是程序的一次执行过程。
  • 进程是是正在运行程序的抽象。它代表运行的CPU,也称进程是对CPU的抽象。
  • 系统资源(如内存、文件)以进程为单位分配。
  • 操作系统为每个进程分配了独立的地址空间
  • 操作系统通过“调度”把控制权交给进程。

二、线程

1、什么是线程

线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

线程由线程ID,程序计数器(PC)[用于指向内存中的程序指令],寄存器集合[由于存放本地变量和临时变量]和堆栈[用于存放方法指令和方法参数等]组成。

2、为什么引入线程

主要归咎于两点. 一个是由实现决定的,一个是由需求决定的.

  1. 进程是资源调度的单位, 因此进程之间的切换的代价和开销比较大.
  2. 一个进程内可能需要多任务并发的执行,实现不同的功能.

3、进程与线程的区别

  1. 进程是拥有系统资源的,系统会给进程分配一个完整的虚拟地址空间.(不同进程无法共享相同的内存空间)
  2. 线程除了少量必要的资源外(存放本地变量),几乎不需要资源,因此它与资源分配无关。
  3. 进程之间相互独立,且不能共享资源
  4. 在同一进程的线程之间,可以共享进程的所有资源。
  5. 一个线程挂掉,整个进程都会跟着挂掉,而多进程应用,进程挂掉,不会影响到其他进程。多进程的程序要比多线程的程序健壮。
  6. 线程上下文切换的速度比进程上下文切换的快得多。
  7. 在多线程系统中,进程不是可执行的实体,线程才是实际的执行单位.

4、线程设计的3个难点

  1. 在 CPU 密集型任务、I/O 密集型任务以及充分利用多核 CPU 提升程序性能上找到一个平衡点。
  2. 尽可能支持规模更大的线程数量。
  3. 减少线程在用户态(User Mode)和内核态(Kernel Mode)中切换带来的开销。

5、并发与并行

并发:一个时间段内有很多的线程或进程在执行,但何时间点上都只有一个在执行,多个线程或进程争抢时间片轮流执行。

并行:一个时间段和时间点上都有多个线程或进程在执行。