-
2019-03-12 20:19:10
【概念】
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。一个程序由一个或多个进程组成,一个进程由一个或多个线程组成。
【进程 线程的区别】
1.地址空间:
进程之间是独立的地址空间,但同一进程的线程共享本进程的地址空间。
2.资源占用
同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
3.健壮性
一个进程崩溃后,在保护模式下不会对其他进程产生影响; 一个线程崩溃整个进程都死掉,所以多进程要比多线程健壮。
4.执行过程
进程可以独立执行,且每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。 线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。线程是处理器调度的基本单位,但是进程不是。
5.并发和资源消耗
两者均可并发执行。 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。 如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
更多相关内容 -
进程和线程的区别(超详细)
2019-10-03 21:57:46进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如...与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟...文章目录
进程和线程
进程
一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。
线程
进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
Java 程序天生就是多线程程序,我们可以通过 JMX 来看一下一个普通的 Java 程序有哪些线程,代码如下。
public class MultiThread { public static void main(String[] args) { // 获取 Java 线程管理 MXBean ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); // 不需要获取同步的 monitor 和 synchronizer 信息,仅获取线程和线程堆栈信息 ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false); // 遍历线程信息,仅打印线程 ID 和线程名称信息 for (ThreadInfo threadInfo : threadInfos) { System.out.println("[" + threadInfo.getThreadId() + "] " + threadInfo.getThreadName()); } } }
上述程序输出如下(输出内容可能不同,不用太纠结下面每个线程的作用,只用知道 main 线程执行 main 方法即可):
[6] Monitor Ctrl-Break //监听线程转储或“线程堆栈跟踪”的线程 [5] Attach Listener //负责接收到外部的命令,而对该命令进行执行的并且把结果返回给发送者 [4] Signal Dispatcher // 分发处理给 JVM 信号的线程 [3] Finalizer //在垃圾收集前,调用对象 finalize 方法的线程 [2] Reference Handler //用于处理引用对象本身(软引用、弱引用、虚引用)的垃圾回收的线程 [1] main //main 线程,程序入口
从上面的输出内容可以看出:一个 Java 程序的运行是 main 线程和多个其他线程同时运行。
进程与线程的区别总结
线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。
根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位
资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行
从 JVM 角度说进程和线程之间的关系(重要)
图解进程和线程的关系
下图是 Java 内存区域,通过下图我们从 JVM 的角度来说一下线程和进程之间的关系。
从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈。
程序计数器为什么是私有的?
程序计数器主要有下面两个作用:
- 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
- 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。
需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。
所以,程序计数器私有主要是为了线程切换后能恢复到正确的执行位置。
虚拟机栈和本地方法栈为什么是私有的?
- 虚拟机栈:每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
- 本地方法栈:和虚拟机栈所发挥的作用非常相似,区别是: 虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。
所以,为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地方法栈是线程私有的。
一句话简单了解堆和方法区
堆和方法区是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象 (所有对象都在这里分配内存),方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
多进程和多线程区别
多进程:操作系统中同时运行的多个程序
多线程:在同一个进程中同时运行的多个任务
举个例子,多线程下载软件,可以同时运行多个线程,但是通过程序运行的结果发现,每一次结果都不一致。 因为多线程存在一个特性:随机性。造成的原因:CPU在瞬间不断切换去处理各个线程而导致的,可以理解成多个线程在抢CPU资源。
多线程提高CPU使用率
多线程并不能提高运行速度,但可以提高运行效率,让CPU的使用率更高。但是如果多线程有安全问题或出现频繁的上下文切换时,运算速度可能反而更低。
Java中的多线程
Java程序的进程里有几个线程:主线程,垃圾回收线程(后台线程)等
在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。
Java支持多线程,当Java程序执行main方法的时候,就是在执行一个名字叫做main的线程,可以在main方法执行时,开启多个线程A,B,C,多个线程 main,A,B,C同时执行,相互抢夺CPU,Thread类是java.lang包下的一个常用类,每一个Thread类的对象,就代表一个处于某种状态的线程
-
进程与线程的区别和联系
2022-03-27 17:30:14一、进程 进程(Process)是操作系统分配资源的基本单位,⼀个进程拥有的资源有⾃⼰的堆、栈、虚存空间 (⻚表)、⽂件描述符等信息。 从编程的⻆度来理解进程,可以把它看作是⼀个类或⼀个 PCB (Process Control ...一、进程
进程(Process)是操作系统分配资源的基本单位,⼀个进程拥有的资源有⾃⼰的堆、栈、虚存空间
(⻚表)、⽂件描述符等信息。 从编程的⻆度来理解进程,可以把它看作是⼀个类或⼀个 PCB
(Process Control Block)进程控制块的结构体。1.1进程的本质
进程本质就是⼀个 PCB(Process Control Block)结构体,类似于 Java 中的类。
进程中包括了以下几个属性:- PID:进程的唯一身份标识(当重启进程后PID会更改)
- 进程状态:新建状态、就绪状态、运行状态、阻塞状态、销毁状态
- 优先级:决定进程的执行顺序
- 记账信息:为保证进程执行的相对公平
- 上下文:保存本次的执行状态,以便下次继续执行
- 一组内存:指定进程需要使用的资源
间⽚:每个进程得的 CPU 执⾏的时间叫做时间⽚。
内核态和⽤户态:内核态表示操作系统作为最底层的软件拥有最⾼的权限就叫做内核态,⽤户态指⽤户编写的程序。二、线程
线程(Thread)是操作系统能够进⾏运算调度的最⼩单位。它被包含在进程之中,是进程中的实际运作
单位。⼀条线程指的是进程中⼀个单⼀顺序的控制流,⼀个进程中可以并发多个线程,每条线程并⾏执
⾏不同的任务。在 Unix System V 及 SunOS 中也被称为轻量进程(lightweight processes),但轻量
进程更多指内核线程(kernel thread),⽽把⽤户线程(user thread)称为线程。三、进程与线程的区别与联系
- 从属关系不同:进程是正在运⾏程序的实例,进程中包含了线程,⽽线程中不能包含进程。
- 描述重点不同:进程是操作系统分配资源的基本单位,线程是操作系统调度的最小单位
- 共享资源不同:多个进程间不能共享资源,每个进程有⾃⼰的堆、栈、虚存空间(⻚表)、⽂件描述符等信息,⽽线程可以共享进程资源⽂件(堆和⽅法区)。
- 上下文切换速度不同:线程上下文切换速度很快,进程切换上下文速度很慢
- 操作者不同:操作系统操纵进程,编程人员操纵线程
-
进程与线程区别以及应用场景
2019-06-24 09:33:35一. 两者区别 进程是分配资源的基本单位;...②更强的容错性:比起多线程的一个好处是一个进程崩溃了不会影响其他进程。 ③有内核保证的隔离:数据和错误隔离。 对于使用如C/C++这些语言编写的本地代码,错误隔离是...一. 两者区别
进程是分配资源的基本单位;线程是系统调度和分派的基本单位。
属于同一进程的线程,堆是共享的,栈是私有的。
属于同一进程的所有线程都具有相同的地址空间。多进程的优点:
①编程相对容易;通常不需要考虑锁和同步资源的问题。
②更强的容错性:比起多线程的一个好处是一个进程崩溃了不会影响其他进程。
③有内核保证的隔离:数据和错误隔离。 对于使用如C/C++这些语言编写的本地代码,错误隔离是非常有用的:采用多进程架构的程序一般可以做到一定程度的自恢复;(master守护进程监控所有worker进程,发现进程挂掉后将其重启)。
多线程的优点:
①创建速度快,方便高效的数据共享
共享数据:多线程间可以共享同一虚拟地址空间;多进程间的数据共享就需要用到共享内存、信号量等IPC技术。
②较轻的上下文切换开销 - 不用切换地址空间,不用更改寄存器,不用刷新TLB。
③提供非均质的服务。如果全都是计算任务,但每个任务的耗时不都为1s,而是1ms-1s之间波动;这样,多线程相比多进程的优势就体现出来,它能有效降低“简单任务被复杂任务压住”的概率。二. 应用场景
1. 多进程应用场景
nginx主流的工作模式是多进程模式(也支持多线程模型)
几乎所有的web server服务器服务都有多进程的,至少有一个守护进程配合一个worker进程,例如apached,httpd等等以d结尾的进程包括init.d本身就是0级总进程,所有你认知的进程都是它的子进程;
chrome浏览器也是多进程方式。 (原因:①可能存在一些网页不符合编程规范,容易崩溃,采用多进程一个网页崩溃不会影响其他网页;而采用多线程会。②网页之间互相隔离,保证安全,不必担心某个网页中的恶意代码会取得存放在其他网页中的敏感信息。)
redis也可以归类到“多进程单线程”模型(平时工作是单个进程,涉及到耗时操作如持久化或aof重写时会用到多个进程)
2. 多线程应用场景
线程间有数据共享,并且数据是需要修改的(不同任务间需要大量共享数据或频繁通信时)。
提供非均质的服务(有优先级任务处理)事件响应有优先级。
单任务并行计算,在非CPU Bound的场景下提高响应速度,降低时延。
与人有IO交互的应用,良好的用户体验(键盘鼠标的输入,立刻响应)
案例:
桌面软件,响应用户输入的是一个线程,后台程序处理是另外的线程;
memcached
3. 选什么?
①需要频繁创建销毁的优先用线程(进程的创建和销毁开销过大)
这种原则最常见的应用就是Web服务器了,来一个连接建立一个线程,断了就销毁线程,要是用进程,创建和销毁的代价是很难承受的②需要进行大量计算的优先使用线程(CPU频繁切换)
所谓大量计算,当然就是要耗费很多CPU,切换频繁了,这种情况下线程是最合适的。
这种原则最常见的是图像处理、算法处理。③强相关的处理用线程,弱相关的处理用进程
什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。
一般的Server需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。
当然这种划分方式不是一成不变的,也可以根据实际情况进行调整。④可能要扩展到多机分布的用进程,多核分布的用线程
⑤都满足需求的情况下,用你最熟悉、最拿手的方式
至于“数据共享、同步”、“编程、调试”、“可靠性”这几个维度的所谓的“复杂、简单”应该怎么取舍,我只能说:没有明确的选择方法。但我可以告诉你一个选择原则:如果多进程和多线程都能够满足要求,那么选择你最熟悉、最拿手的那个。虽然我给了这么多的选择原则,但实际应用中基本上都是“进程+线程”的结合方式,千万不要真的陷入一种非此即彼的误区。
原文:https://blog.csdn.net/weixin_39731083/article/details/82015830
-
面试常问——进程和线程的区别
2022-03-22 00:03:01最近学习到了Java的多线程部分,了解到了进程和线程的相关概念,下面我们来介绍一下进程和线程吧。 目录 一、进程 二、线程 三、进程VS线程 一、进程 进程是操作系统资源分配的最小单元。一个进程拥有的资源... -
进程与线程的区别与联系
2022-03-25 19:29:06线程与进程的区别与联系 进程 上节我们写了有关进程的相关知识,这节我们来说下线程及他与进程的区别与联系,有没看过的可以先点击链接跳转 Java 进程_Xiillldddd的博客-CSDN博客 线程 什么是线程呢? ... -
进程和线程的主要区别(总结)
2018-06-13 10:11:52根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类... -
android中进程和线程的关系与区别
2019-03-01 11:55:12什么是进程什么是线程 进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程 进程可以认为是程序执行时的一个实例。进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。... 线程与进程... -
进程和线程的区别和联系
2022-03-31 09:08:53目录线程概念存在意义进程和线程的区别和联系 线程 概念 进程就是一个"执行流",按照某种顺序执行自己的代码。 存在意义 如今各种操作系统均能实现多进程同时执行,也就是支持并发编程。一个进程的创建需要消耗计算机... -
线程和进程的区别
2020-02-19 17:11:053.线程和进程之间的关系? 4.进程之间的通信? 5.线程之间的通信? 1.进程是什么 进程 -- 资源分配的最小单位。 网上查询的答案中很多都是这样的回答,但是这个回答自我感觉还是比较抽象。计算机的核心是cpu,... -
Android进程与线程区别
2015-07-05 12:04:25也就是线程存在于进程之中,一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有自己的堆栈。由于堆栈是每个线程一个,因此局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局 -
进程和线程的区别
2022-02-25 23:39:54线程与进程的比较如下: 1.进程是资源(包括内存、打开的文件等)分配的单位,线程是CPU调度的单位; 2.进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈; 3.线程同样具有就绪、阻塞、执行三... -
总结进程与线程的区别和联系
2022-03-21 09:14:271.进程包含线程,一个进程离可以有一个线程,也可以有多个线程。 2.进程和线程都是为了处理并发编程这样的场景。 但是进程有问题,频繁创建和释放时效率低。相比之下,线程更轻量,创建和释放效率更高, 3.操作系统... -
进程与线程的区别与联系(经典面试题)
2016-03-17 15:26:19这问题,估计计算机专业的同学在找... 要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本 -
Linux进程与线程的区别
2016-05-26 14:19:43进程与线程的区别,早已经成为了经典问题。自线程概念诞生起,关于这个问题的讨论就没有停止过。无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了。一般程序员而言,搞清楚二者的概念,... -
进程、线程及协程的区别
2020-10-21 22:53:06一、概念 **进程:**进程是一个具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统...一个线程组中多个线程共享一个进程的地址空间,一个线程的非法操作会使整个进程崩溃。 **3、上下文切换开销区别:** -
什么是进程?什么是线程?进程与线程的区别?如何选择进程或者线程
2020-05-08 14:17:27什么是进程? 什么是线程? 线程和进程之间的区别 进程和线程的选择取决于什么? 计算密集型任务以及I/O密集型任务 在python中,多进程和多线程的选择取决于什么 -
进程和线程的区别(重点)
2017-08-03 15:03:00简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率... -
操作系统——进程和线程的区别
2019-11-13 20:11:57操作系统——进程和线程的区别 最近学习了操作系统中的进程和线程这两个知识点,昨天老师给我们出了一道题:进程和线程的区别。听完题目后一脸懵逼,只想到了进程的一部分概念,回来之后就查书,找到了答案。 1.进程... -
线程和进程的区别与联系以及单线程多进程与单进程多线程的区别
2019-07-01 11:34:41线程和进程 概念 进程(process):是指具有已一定功能的独立程序,是系统资源分配的基本单位,在内存中有其完备的数据空间和代码空间,拥有完整的虚拟空间地址。...它与父进程的其它线程共享该进程所拥有的全部代... -
线程和进程的区别和联系
2022-03-26 14:33:51操作系统任何处理线程 1.先描述一个进程(明确出一个进程上面的一些相关的属性) 操作系统里面主要是通过c/c++来实现的,此处的描述其实就是用的c语言中的"结构体"(操作系统中描述进程的这个结构体称为"PCB"(process... -
面试中的 进程和线程的区别
2017-09-04 11:46:08下面就叨唠叨唠面试中需要掌握的进程和线程的区别。 进程 进程是对计算机的一种抽象; 1. 进程是一个计算过程,表示一个逻辑控制流,它造成一个假象,好像这个进程一直在独占CPU资源。 2. 进程拥有一个... -
总结:进程和线程的区别
2018-07-28 18:58:18首先呢,进程是系统进行资源分配和调度的一个独立单位,线程呢就是进程内部的一条执行序列是CPU调度和分派的基本单位,线程的执行呢必须依赖于进程,一个进程内部至少有一条线程,main主函数的执行序列为主线程 ,... -
什么是进程,什么是线程,多线程与多进程的区别?
2021-03-15 20:35:33什么是进程,什么是线程,多线程与多进程的区别?什么是进程,什么是线程多线程与多进程的区别 什么是进程,什么是线程 什么是进程,什么是线程,以及什么实际场景使用他们? 进程(Process):是计算机中的程序关于某... -
Python中进程和线程的区别详解
2019-03-04 09:30:46先说一下什么是进程,线程 进程:进程时计算机程序一次执行的实例,由 程序段 数据段 PCB组成,是计算机资源分配和调度的基本单位,也是线程的容器 线程:线程也叫作轻量级进程,是程序执行的最小单位,他本身... -
进程和线程的区别(c++)
2019-06-17 16:57:26进程和线程的区别 进程 process 什么是进程 一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位 进程与程序的差别 进程是一个动态的概念,而程序只是一组指令。 ... -
进程与线程的区别与联系、进程与线程的通信方式
2018-10-08 14:44:16三、线程和进程的区别? 调度:线程是独立调度的基本单位,进程是拥有资源的基本单位。在同一进程中,线程的切换不会引起进程的切换;在不同的进程中,进行线程切换,则会引起进程的切换。 拥有资源:...