进程与线程的区别与联系

进程与线程的区别与联系

线程

是进程中的一个执行任务(控制单元)是处理器分配资源的最小单位,负责当前进程中程序的执行。

同类的多个线程共享进程的共享代码和数据空间(堆和方法区资源 (JDK1.8 之后的元空间)),但每个线程有自己的程序计数器、虚拟机栈和本地方法栈。

各个线程之间作切换工作时或创建线程时,负担要比进程小得多。称为轻量级进程。

一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

线程不能独立执行,必须依存在应用程序中(进程)。

进程

进程是操作系统资源分配的基本单位。

进程都有独立的代码和数据空间(程序上下文),进程之间切换会有较大的开销,线程可以看做轻量级的进程。

一个进程至少有一个或多个线程,多个线程可共享数据。

进程之间的地址空间和资源是相互独立的。

一个进程崩溃后,在保护模式下不会对其他进程产生影响。

每个独立的进程有程序运行的入口、顺序执行序列和程序出口。

多进程要比多线程健壮。

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

线程切换后能恢复到正确的执行位置

字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。

在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。

虚拟机栈和本地方法栈为什么是私有的?

虚拟机栈:每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。

本地方法栈:和虚拟机栈所发挥的作用非常相似,区别是: 虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。

保证线程中的局部变量不被别的线程访问到。

堆和方法区

堆和方法区是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象 (所有对象都在这里分配内存),方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

多进程和多线程区别

多进程:操作系统中同时运行的多个程序

多线程:在同一个进程中同时运行的多个任务

举个例子,多线程下载软件,可以同时运行多个线程,但是通过程序运行的结果发现,每一次结果都不一致。 因为多线程存在一个特性:随机性。造成的原因:CPU在瞬间不断切换去处理各个线程而导致的,可以理解成多个线程在抢CPU资源。

多线程并不能提高运行速度,但可以提高运行效率,让CPU的使用率更高。但是如果多线程有安全问题或出现频繁的上下文切换时,运算速度可能反而更低。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值