进程 & 线程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动。
进程是系统进行资源分配和调度的基本单位
在早期面向进程设计的计算机结构中,进程是程序的基本执行实体
在当代面向线程设计的计算机结构中,进程是线程的容器
程序是指令、数据及其组织形式的描述,进程是程序的实体。
系统运行一个程序,即是一个进程从创建,运行到消亡的过程。


线程(thread)是操作系统能够进行运算调度的最小单位
线程,它被包含在进程之中,是进程中的实际运作单位
一条线程指的是:进程中一个单一顺序的控制流。
一个进程中可以并发多个线程,每条线程并行执行不同的任务。
同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等。
同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

上面摘抄自 百度百科,下面摘抄自 JavaGuide

多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈,
所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,Linux 线程被称为轻量级进程。

并行 & 并发

并行 (Parallel) 是指:一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。

  • 当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,同时进行
  • 决定并行的因素不是 CPU 的数量,而是 CPU 的核心数量,一个 CPU 多个核也可以并行

并发 (Concurrent) 是指:在同一个时间段内,两个或多个程序执行,有时间上的重叠(宏观上是同时的,微观上仍是顺序执行)。

同步 & 异步

从方法调用的角度来讲,如果

  • 需要等待结果返回,才能继续运行是同步
  • 不需要等待结果返回,就能继续运行是异步

    时间片

    时间片即 CPU 分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。
    如果在时间片结束时,进程还在运行,则 CPU 将被剥夺并分配给另一个进程。
    如果进程在时间片结束前阻塞或结束,则 CPU 当即进行切换。而不会造成 CPU 资源浪费。