网站登不上去的原因,网站源码对应的数据库怎么做,方城网站制作,注册商标需要多长时间进程与线程的区别
线程具有许多传统进程所具有的特征#xff0c;故又称为轻型进程(Light—Weight Process)或进程元#xff1b;而把传统的进程称为重型进程(Heavy—Weight Process)#xff0c;它相当于只有一个线程的任务。在引入了线程的操作系统中#xff0c;通常一个进…进程与线程的区别
线程具有许多传统进程所具有的特征故又称为轻型进程(Light—Weight Process)或进程元而把传统的进程称为重型进程(Heavy—Weight Process)它相当于只有一个线程的任务。在引入了线程的操作系统中通常一个进程都有若干个线程至少包含一个线程。
根本区别进程是操作系统资源分配的基本单位而线程是处理器任务调度和执行的基本单位资源开销每个进程都有独立的代码和数据空间程序上下文程序之间的切换会有较大的开销线程可以看做轻量级的进程同一类线程共享代码和数据空间每个线程都有自己独立的运行栈和程序计数器PC线程之间切换的开销小。包含关系如果一个进程内有多个线程则执行过程不是一条线的而是多条线线程共同完成的线程是进程的一部分所以线程也被称为轻权进程或者轻量级进程。内存分配同一进程的线程共享本进程的地址空间和资源而进程之间的地址空间和资源是相互独立的影响关系一个进程崩溃后在保护模式下不会对其他进程产生影响但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。执行过程每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行必须依存在应用程序中由应用程序提供多个线程执行控制两者均可并发执行
JVM角度出发
下图是 Java 内存区域通过下图我们从 JVM 的角度来说一下线程和进程之间的关系。 从上图可以看出一个进程中可以有多个线程多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源但是每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈。
程序计数器
程序计数器主要有下面两个作用
字节码解释器通过改变程序计数器来依次读取指令从而实现代码的流程控制如顺序执行、选择、循环、异常处理。 在多线程的情况下程序计数器用于记录当前线程执行的位置从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。 需要注意的是如果执行的是 native 方法那么程序计数器记录的是 undefined 地址只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。所以程序计数器私有主要是为了线程切换后能恢复到正确的执行位置。
虚拟机栈和本地方法栈
虚拟机栈每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 本地方法栈和虚拟机栈所发挥的作用非常相似区别是 虚拟机栈为虚拟机执行 Java 方法 也就是字节码服务而本地方法栈则为虚拟机使用到的 Native 方法服务。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。 所以为了保证线程中的局部变量不被别的线程访问到虚拟机栈和本地方法栈是线程私有的。
堆和方法区
堆和方法区是所有线程共享的资源其中堆是进程中最大的一块内存主要用于存放新创建的对象 (所有对象都在这里分配内存)方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。