Java多线程-进程与线程

[TOC]

进程与线程

概念

  • 进程

    进程就是应用程序在内存中分配的空间,也就是正在运行的程序,是系统运行程序的基本单位

    在Java中,当我们启动main函数时其实就是启动了一个JVM进程,而main函数所在的线程就是这个进程中的一个线程,叫做主线程。

  • 线程

    线程是一个比进程更小的执行单位,一个进程在执行过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在各个线程间切换工作时,负担会比进程小得多,因此线程也被称为轻量级进程。

线程与进程的区别

线程是一个比进程更小的执行单位,一个进程在其执行过程中可以产生多个线程。

进程是一个独立的运行环境,而线程是其中执行的一个任务,他们间本质的区别是是否单独占有内存地址以及其他系统资源(比如 I/O)

  • 进程间存在内存隔离,数据是分开的,数据共享复杂但同步简单,各个进程间互不干扰;而线程共享进程占有的内存地址空间和资源,数据共享简单但同步复杂。
  • 进程的创建和销毁开销较大,而线程的开销较小。
  • 进程间通信比较复杂,线程间通信比较简单。
  • 进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位,即CPU分配时间的单位。

上下文切换

上下文切换是指CPU从一个进程(或线程)切换到另一个进程(或线程)。上下文是指某一时间点CPU寄存器和程序计数器的内容

CPU通过为每个线程分配CPU时间片来实现多线程机制。CPU通过时间片分配算法来循环执行任务,当前执行一个时间片后会切换到下一个任务。

但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态,所以任务从保存到再加载的过程就是一次上下文切换。

-------------本文结束感谢您的阅读-------------