线程、进程;并发,并行

109 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情

线程与进程

进程(Process)

程序的一次执行过程

  • 特性

    • 程序是静态的,而进程是动态的。它随程序的运行而产生、改变和消亡。所以同时挂三个 QQ 号,它们就对应三个 QQ 进程,退出一个就会杀死一个对应的进程
    • 进程不仅包含正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说 CPU、内存、网络资源等。所以同样一个程序,同一时刻两次运行了两次,那么他们就是两个独立的进程
  • 进程的组成

    • 进程控制块 PCB。与操作系统相关
    • 数据段。即进程运行过程中各种数据
    • 程序段。即程序的代码
  • 进程的状态 preview

    • 运行态(running):进程占有 CPU 正在运行

    • 就绪态(ready):进程具备运行条件,等待系统分配 CPU 以便运行

    • 阻塞态/等待态(wait):进程不具备运行条件,正在等待某个事件的完成

    • 新建态(new):进程正在被创建时的状态

    • 结束态(exit):进程正在从系统中消失时的状态

🧭时间片

进程是并发执行,宏观上在一段时间内能同时运行多个程序,但其实微观上是交替发生的。也就是说 CPU 一般不会让一个进程一次性执行完,为了保证所有进程可以得到公平调度,CPU 时间被划分为一段段的时间片,这些时间片再被轮流分配给各个进程。某个进程的时间片用完后这个进程就会进入就绪态,而其他被分配到时间片的进程就会进入运行态。这个处于就绪态的进程就需要等待进程调度程序的下一次调度,为其分配 CPU 时间片后才能再次恢复运行。

线程(thread)

  • 一个进程中可以有多个线程,它们共享这个进程的资源

  • 引入线程前,进程是资源分配和独立调度的基本单位。引入线程后,进程是资源分配的基本单位,线程是独立调度的基本单位

  • 线程的特点:与进程差不多,进程有的它基本都有

    • 线程间可以并发执行;
    • 线程具有就绪、阻塞、运行三种基本状态,同样具有状态之间的转换关系;
    • 在多 CPU 环境下,各个线程也可以分派到不同的 CPU 上并行执行
    • 线程的缺点:当进程中的一个线程奔溃时,会导致其所属进程的所有线程奔溃

⚔线程与进程的对比

  • 进程间的通信必须请求操作系统服务(因为 CPU 要切换到内核态),开销很大。而同进程下的线程间通信,无需操作系统干预,开销更小;但从属于不同进程中的线程间通信,也必须请求操作系统服务
  • 线程间的并发比进程的开销更小,系统并发性提升;但从属于不同进程的线程间切换,它是会导致进程切换的,所以开销也大。

并发与并行

⭐一个 CPU 在同一时间只能执行一个进程/线程。下面将进程/线程统一叫作任务

并发(Concurrency)

  • 是针对单核CPU而言的,它指的是 CPU 交替执行不同任务的能力

并行(Parallelism)

  • 是针对多核CPU而言,它指的是多个核心同时执行多个任务的能力

并行+并发

  • 所有核心都要并行工作,每个核心还要并发工作