精华内容
下载资源
问答
  • 进程和线程的区别
    千次阅读
    2019-03-12 20:19:10

    【概念】
    进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,竞争计算机系统资源的基本单位。
    线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

    一个程序由一个或多个进程组成,一个进程由一个或多个线程组成。
    

    【进程 线程的区别】

    1.地址空间:

    进程之间是独立的地址空间,但同一进程的线程共享本进程的地址空间。
    

    2.资源占用

    同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
    

    3.健壮性

    一个进程崩溃后,在保护模式下不会对其他进程产生影响;
    
    一个线程崩溃整个进程都死掉,所以多进程要比多线程健壮。
    

    4.执行过程

    进程可以独立执行,且每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。
    
    线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。线程是处理器调度的基本单位,但是进程不是。
    

    5.并发和资源消耗

    两者均可并发执行。
    
    进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。
    
    如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
    
    更多相关内容
  • 进程和线程区别(超详细)

    万次阅读 多人点赞 2019-10-03 21:57:46
    进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程线程 进程中的一个执行任务(控制单元),负责...

    进程和线程

    进程

    一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在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 之后的元空间)资源,但是每个线程有自己的程序计数器虚拟机栈本地方法栈

    程序计数器为什么是私有的?

    程序计数器主要有下面两个作用:

    1. 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
    2. 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。

    需要注意的是,如果执行的是 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类的对象,就代表一个处于某种状态的线程

    展开全文
  • 进程和线程区别详解

    千次阅读 2017-08-03 20:16:45
    1.进程和线程有什么区别进程是资源分配的基本单位,线程是cpu调度,或者说是程序执行的最小单位; 进程有独立的地址空间,启动一个新的进程,系统必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段...
     1.进程和线程有什么区别?

    a:进程是资源分配的基本单位,线程是cpu调度,或者说是程序执行的最小单位;

    b:进程有独立的地址空间,启动一个新的进程,系统必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段。而运行一个进程中的线程,它们之间共享大部分数据,使用相同的地址空间,当然,线程是拥有自己的局部变量和堆栈;

    c:线程之间的通信比较方便。统一进程下的线程共享数据(比如全局变量,静态变量),通过这些数据来通信不仅快捷而且方便,当然如何处理好这些访问的同步与互斥正是编写多线程程序的难点。而进程之间的通信只能通过进程通信的方式进行;

    d:多进程比多线程程序要健壮。一个线程死掉整个进程就死掉了,但是在保护模式下,一个进程死掉对另一个进程没有直接影响;

    e:线程的执行与进程是有区别的。每个独立的线程有有自己的一个程序入口,顺序执行序列和程序的出口,但是线程不能独立执行,必须依附与程序之中由应用程序提供多个线程的并发控制;


    2.什么是线程安全?

    线程安全:多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

    线程不安全:访问时不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

    原因:线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

    例子:比如一个arrayList类,在添加一个元素的时候,它可能会有两步来完成:1. 在items[index]的位置存放此元素;2. 增大size的值。
    在单线程运行的情况下,如果size=0,添加一个元素后,此元素在位置item[0],而且size=1;
    而如果是在多线程情况下,比如有两个线程,线程A先将元素存放在位置item[0]。但是此时CPU调度线程A暂停,线程B得到运行的机会。线程B也向此arrayList添加元素,因为此时size仍然等于0,所以线程B也将元素存放在位置item[0]。然后线程A和线程B都继续运行,都增加size的值。那么元素实际上只有一个,存放在位置item[0],而size却等于2。这就是"线程不安全"了。


    3.多线程同步和互斥有何异同,在什么情况下分别使用他们?

    线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒,存在先后关系。

    线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步。


    4.其他

    线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止;

    线程有3个基本状态:执行、就绪、阻塞;

    多线程中栈一般用于存放局部变量,为线程私有,堆一般用于存放程序共享数据。


    展开全文
  • 进程和线程区别

    千次阅读 2022-02-25 23:39:54
    2.进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器栈; 3.线程同样具有就绪、阻塞、执行三种基本状态,同样具有状态之间的转换关系; 4.线程能减少并发执行的时间空间开销; 对于,线程相比...

    线程与进程的比较如下:
    1.进程是资源(包括内存、打开的文件等)分配的单位,线程是CPU调度的单位;

    2.进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈;

    3.线程同样具有就绪、阻塞、执行三种基本状态,同样具有状态之间的转换关系;

    4.线程能减少并发执行的时间和空间开销;


    对于,线程相比进程能减少开销,体现在:
    1线程的创建时间比进程快,因为进程在创建的过程中,还需要资源管理信息,比如内存管理信息、文件管理信息,而线程在创建的过程中,不会涉及这些资源管理信息,而是共享它们;

    2线程的终止时间比进程快,因为线程释放的资源相比进程少很多;

    3同一个进程内的线程切换比进程切换快,因为线程具有相同的地址空间(虚拟内存共享),这意味着同一个进程的线程都具有同一个页表,那么在切换的时候不需要切换页表。而对于进程之间的切换,切换的时候要把页表给切换掉,而页表的切换过程开销是比较大的;

    4由于同一进程的各线程间共享内存和文件资源,那么在线程之间数据传递的时候,就不需要经过内核了,这就使得线程之间的数据交互效率更高了;
    所以,不管是时间效率,还是空间效率线程比进程都要高。

    在前面我们知道了,线程与进程最大的区别在于︰线程是调度的基本单位,而进程则是资源拥有的基本单位。

    线程的优点:
    一个进程中可以同时存在多个线程;。各个线程之间可以并发执行;
    各个线程之间可以共享地址空间和文件等资源;
    线程的缺点:
    当进程中的一个线程崩溃时,会导致其所属进程的所有线程崩溃。
     

    进程各自的运行状态:

    在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。加上创建状态结束状态。
    线程同样具有就绪、阻塞、执行三种基本状态,同样具有状态之间的转换关系;
     

    线程的通信方式和进程的通信方式

    一、进程间的通信方式

    1. 管道( pipe ):
      管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
    2. 有名管道 (namedpipe) :
      有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    3. 信号量(semophore ) :
      信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    4. 消息队列( messagequeue ) :
      消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    5. 信号 (sinal ) :
      信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    6. 共享内存(shared memory ) :
      共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
    7. 套接字(socket ) :
      套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同设备及其间的进程通信。

    二、线程间的通信方式

    1. 锁机制:包括互斥锁、条件变量、读写锁
      互斥锁提供了以排他方式防止数据结构被并发修改的方法。
      读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
      条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
    2. 信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
    3. 信号机制(Signal):类似进程间的信号处理
      线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
    展开全文
  • 进程和线程区别

    千次阅读 2020-08-28 22:20:29
    请描述进程和线程区别进程是程序的一次执行。线程可以理解为进程中执行的一段程序片。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别 进程间是独立,这表现在内存空间,上下文环境上;线程运行在...
  • 面试常问——进程和线程区别

    千次阅读 2022-03-22 00:03:01
    最近学习到了Java的多线程部分,了解到了进程和线程的相关概念,下面我们来介绍一下进程和线程吧。 目录 一、进程 二、线程 三、进程VS线程 一、进程 进程是操作系统资源分配的最小单元。一个进程拥有的资源...
  • 进程线程区别和联系

    千次阅读 2022-03-27 17:30:14
    一、进程 进程(Process)是操作系统分配资源的基本单位,⼀个进程拥有的资源有⾃⼰的堆、栈、虚存空间 (⻚表)、⽂件描述符等信息。 从编程的⻆度来理解进程,可以把它看作是⼀个类或⼀个 PCB (Process Control ...
  • 操作系统——进程和线程区别

    千次阅读 2019-11-13 20:11:57
    操作系统——进程和线程区别 最近学习了操作系统中的进程和线程这两个知识点,昨天老师给我们出了一道题:进程和线程区别。听完题目后一脸懵逼,只想到了进程的一部分概念,回来之后就查书,找到了答案。 1.进程...
  • 进程线程区别和联系

    千次阅读 2022-03-31 09:08:53
    目录线程概念存在意义进程线程区别和联系 线程 概念 进程就是一个"执行流",按照某种顺序执行自己的代码。 存在意义 如今各种操作系统均能实现多进程同时执行,也就是支持并发编程。一个进程的创建需要消耗计算机...
  • 浅谈进程线程区别和联系

    千次阅读 2019-01-21 15:29:44
    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计...
  • 如何查询一个进程下面的线程数(进程和线程区别) https://www.cnblogs.com/kevingrace/p/5252919.htm
  • 总结:进程和线程区别

    千次阅读 2018-07-28 18:58:18
    首先呢,进程是系统进行资源分配调度的一个独立单位,线程呢就是进程内部的一条执行序列是CPU调度分派的基本单位,线程的执行呢必须依赖于进程,一个进程内部至少有一条线程,main主函数的执行序列为主线程 ,...
  • 进程和线程的主要区别(总结)

    万次阅读 多人点赞 2018-06-13 10:11:52
    根本区别进程是操作系统资源分配的基本单位,而线程是任务调度执行的基本单位在开销方面:每个进程都有独立的代码数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类...
  • 进程线程区别与联系

    千次阅读 2022-03-25 19:29:06
    上节我们写了有关进程的相关知识,这节我们来说下线程及他与进程区别与联系,有没看过的可以先点击链接跳转 Java 进程_Xiillldddd的博客-CSDN博客 线程 什么是线程呢? 首先面对这个问题我们先来说说进程是...
  • 面试中的 进程和线程区别

    千次阅读 2017-09-04 11:46:08
    下面就叨唠叨唠面试中需要掌握的进程和线程区别。    进程 进程是对计算机的一种抽象; 1. 进程是一个计算过程,表示一个逻辑控制流,它造成一个假象,好像这个进程一直在独占CPU资源。 2. 进程拥有一个...
  • 线程和进程有什么区别(简单介绍)

    万次阅读 多人点赞 2018-08-13 19:23:00
    线程和进程有什么区别(简单介绍) 简单介绍 一、线程的基本概念  线程进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度分派的基本单位,线程自己不拥有系统资源,只拥有一点...
  • 进程线程区别以及应用场景

    千次阅读 2019-06-24 09:33:35
    线程是系统调度分派的基本单位。 属于同一进程线程,堆是共享的,栈是私有的。 属于同一进程的所有线程都具有相同的地址空间。 多进程的优点: ①编程相对容易;通常不需要考虑锁同步资源的问题。 ②更强的...
  • 线程和进程区别(面试必备)

    万次阅读 多人点赞 2019-09-12 17:55:07
    线程进程区别通俗的解释: https://www.jianshu.com/p/8ad441510860 附加可参考文章: https://baijiahao.baidu.com/s?id=1611925141861592999&wfr=spider&for=pc https://www.c...
  • 进程和线程关系及区别

    万次阅读 多人点赞 2015-03-15 21:06:12
    线程进程的一个实体,是CPU调度分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器栈),但是它可与同属一个进程的...
  • Linux进程线程区别

    万次阅读 多人点赞 2016-05-26 14:19:43
    进程线程区别,早已经成为了经典问题。自线程概念诞生起,关于这个问题的讨论就没有停止过。无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了。一般程序员而言,搞清楚二者的概念,...
  • 进程和线程区别(重点)

    千次阅读 2017-08-03 15:03:00
    简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率...
  • java 进程和线程区别与联系

    千次阅读 2016-12-27 21:12:26
     进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命  周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务...
  • Python中进程和线程区别详解

    千次阅读 2019-03-04 09:30:46
     进程进程时计算机程序一次执行的实例,由 程序段 数据段 PCB组成,是计算机资源分配调度的基本单位,也是线程的容器  线程线程也叫作轻量级进程,是程序执行的最小单位,他本身只拥有少部分执行必须的资源...
  • 进程和线程区别(c++)

    千次阅读 2019-06-17 16:57:26
    进程和线程区别 进程 process 什么是进程 一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配调度运行的基本单位 进程与程序的差别 进程是一个动态的概念,而程序只是一组指令。 ...
  • 进程和线程区别 进程是资源的分配调度的一个独立单元,而线程是CPU调度的基本单元 同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程进程的...
  • 线程进程区别和联系

    千次阅读 2022-03-26 14:33:51
    操作系统任何处理线程 1.先描述一个进程(明确出一个进程上面的一些相关的属性) 操作系统里面主要是通过c/c++来实现的,此处的描述其实就是用的c语言中的"结构体"(操作系统中描述进程的这个结构体称为"PCB"(process...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 965,507
精华内容 386,202
关键字:

进程和线程的区别

友情链接: topsis.zip