一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。
一、进程
1、什么是进程
进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。
2、进程的特点
- 进程是程序的一次执行过程。
- 进程是是正在运行程序的抽象。它代表运行的CPU,也称进程是对CPU的抽象。
- 系统资源(如内存、文件)以进程为单位分配。
- 操作系统为每个进程分配了独立的地址空间
- 操作系统通过“调度”把控制权交给进程。
二、线程
1、什么是线程
线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程由线程ID,程序计数器(PC)[用于指向内存中的程序指令],寄存器集合[由于存放本地变量和临时变量]和堆栈[用于存放方法指令和方法参数等]组成。
2、为什么引入线程
主要归咎于两点. 一个是由实现决定的,一个是由需求决定的.
- 进程是资源调度的单位, 因此进程之间的切换的代价和开销比较大.
- 一个进程内可能需要多任务并发的执行,实现不同的功能.
3、进程与线程的区别
- 进程是拥有系统资源的,系统会给进程分配一个完整的虚拟地址空间.(不同进程无法共享相同的内存空间)
- 线程除了少量必要的资源外(存放本地变量),几乎不需要资源,因此它与资源分配无关。
- 进程之间相互独立,且不能共享资源
- 在同一进程的线程之间,可以共享进程的所有资源。
- 一个线程挂掉,整个进程都会跟着挂掉,而多进程应用,进程挂掉,不会影响到其他进程。多进程的程序要比多线程的程序健壮。
- 线程上下文切换的速度比进程上下文切换的快得多。
- 在多线程系统中,进程不是可执行的实体,线程才是实际的执行单位.
4、线程设计的3个难点
- 在 CPU 密集型任务、I/O 密集型任务以及充分利用多核 CPU 提升程序性能上找到一个平衡点。
- 尽可能支持规模更大的线程数量。
- 减少线程在用户态(User Mode)和内核态(Kernel Mode)中切换带来的开销。
5、并发与并行
并发:一个时间段内有很多的线程或进程在执行,但何时间点上都只有一个在执行,多个线程或进程争抢时间片轮流执行。
并行:一个时间段和时间点上都有多个线程或进程在执行。