基础概念
在学习多线程之前需要理解,什么是进程,什么事线程。
进程
首先看下维基百科的定义:
进程(英语:process),是计算机中已运行程序的实体。进程为曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。若干进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或异步(平行)的方式独立运行。现代计算机系统可在同一段时间内以进程的形式将多个程序加载到存储器中,并借由时间共享(或称时分复用),以在一个处理器上表现出同时(平行性)运行的感觉。同样的,使用多线程技术(多线程即每一个线程都代表一个进程内的一个独立执行上下文)的操作系统或计算机架构,同样程序的平行线程,可在多CPU主机或网络上真正同时运行(在不同的CPU上)。
注意几个要点:
- 进程可以理解为执行中的程序。
- 程序本身不是进程,是被动实体,程序自身只是代码和可执行文件。
- 进程本身不只包含程序,进程是主动实体,进程包含程序和程序运行的数据。
- 进程包括:程序代码、程序计数器的值、当前活动和处理器寄存器的内容,还可能包括堆栈段、数据段。
线程
定义:
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
- 线程是CPU使用的基本单元
- 可以将线程理解为在进程中独立运行的子任务
- 由线程ID、程序计数器、寄存器集合和栈组成
- 同一进程的线程共享代码段、数据段和其他操作系统资源
- CPU运行多线程是来回切换的,不是线性运行的。
线程的优点
- 响应度高:如果一个或部分线程阻塞,该程序任何能继续运行。
- 资源共享:线程默认共享他们所属的进程的内存和资源
- 经济:创建和切换进程的资源消耗比线程高很多
- 多处理器的利用:先如今CPU都是多核的,单线程的程序只能运行在一个CPU核上。
参考资料,操作系统概念,Java多线程编程核心技术