一、概念定义
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
一个程序至少一个进程,一个进程至少一个线程。
二、概念通俗理解
为什么有线程:
每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大响应用户请求效率低),因此操作系统中线程概念被引进。
进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行xx.exe就是一个进程。(Ctrl+Alt+delete选择任务管理器进入到就可以看到进程))
线程:进程中的一个执行程序(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可以共享数据。
与进程不同的是同类的多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计算器。虚拟机栈和本地方法栈,所以系统产生一个进程,或是在各个线程之间切换工作时,负担要比进程小的多,也正因为如此,线程也称为轻量级进程
JAVA天生就是多线程程序
三、区别:
1、根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位
2、资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有独立的运行栈和程序计数器(PC),线程之间的切换小
3、内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
4、影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
5、执行过程:每个独立的进程有程序运行的入口,顺序执行序列和程序出口。但是进程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行
多进程:操作系统中同时运行的多个程序
多线程:在同一个进程中同时运行的多个任务
四、何时使用多进程,何时使用多线程?
线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。
进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。
对资源的管理和保护要求高,不限制开销和效率时,使用多进程。
要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。