进程、线程、协程

简介: 面试官:简单聊一下进程、线程、协程的区别吧。。。

进程

读书那会学linux时书本上都会写一句非常经典的话,进程是系统资源分配和调度的基本单位。也不理解啥意思,纯背概念,反正老师说考试会考。导致只对这一句话印象特别深刻。


程序是指令、数据及其组织形式的描述,进程是程序的载体。程序本身是没有生命周期的,只是存在于磁盘上的一些指令集合,但程序一旦被运行起来就是进程。启动后的进程会依赖操作系统的调度完成生命周期的转换。


无论操作系统是单核系统还是多核系统,看起来似乎一个CPU在并行的调度多个进程,其实只是操作系统背后的调度逻辑来通过切换上下文来实现的并发执行,本质上在某一时刻一个CPU只能执行一个进程。只不过切换时间片特别短让我们认为是在并行执行。


并发: 同一时刻只有一个进程/线程运行,其余都阻塞等待调度

并行: 同一时刻有多个进程/线程同时运行


线程

线程为程序调度的最小单位,也就是说一个进程中可以包含多个线程,线程状态也是交由操作系统调度。线程的状态分为新建状态、运行状态、阻塞状态、就绪状态、终止状态,线程之间的切换和进程一样也需要系统进行上下文切换完成。


各个语言的线程概念只是对操作对象中的线程做了一层封装,提供的各个api本质上也是对接操作系统api,由于线程的调度需要操作系统来进行上下文切换资源消耗比较猛。所以出现了更加轻量级的协程。


协程

协程是一种更加轻量级调度单位,协程不被操作系统内核所管理而完全是由程序所控制。

image.png

之所以轻量级也是因为避免操作系统频繁的从用户空间切换到内核空间进行调度的资源消耗,直接在用户空间的代码中管理协程的声明周期,适用于大量并发下的IO事件,这也是Golang风靡全球的原因之一。


总结

进程与线程对比

  1. 线程的创建或销毁的代价比进程小且上下文切换的速度比进程快,需要频繁创建、销毁或大量计算时应优先选用线程
  2. 线程在CPU上的使用效率更高,需要多核分布时优先选用线程,需要多机分布时优先选用进程
  3. 线程的安全性、稳定性没有进程好,需要更稳定安全时优先使用进程。


线程与协程对比

  1. 线程属于操作系统内核管理调度,而协程属于用户空间代码中自己管理的轻量级线程。
  2. 线程运行状态切换及上下文切换需要内核调度,会消耗系统资源;而协程完全由程序控制,状态切换及上下文切换不需要内核参与。





相关文章
聊聊python多线程与多进程
为什么要使用多进程与多线程呢? 因为我们如果按照流程一步步执行任务实在是太慢了,假如一个任务就是10秒,两个任务就是20秒,那100个任务呢?况且cpu这么贵,时间长了就是浪费生命啊!一个任务比喻成一个人,别个做高铁,你做绿皮火车,可想而知!接下来我们先看个例子:
|
4天前
|
数据采集 存储 C++
单线程 vs 多进程:Python网络爬虫效率对比
本文探讨了Python网络爬虫中的单线程与多进程应用。单线程爬虫实现简单,但处理速度慢,无法充分利用多核CPU。而多进程爬虫通过并行处理提高效率,更适合现代多核架构。代码示例展示了如何使用代理IP实现单线程和多进程爬虫,显示了多进程在效率上的优势。实际使用时还需考虑代理稳定性和反爬策略。
单线程 vs 多进程:Python网络爬虫效率对比
|
4天前
|
存储 调度
进程与线程(概念、并行、并发)
进程与线程(概念、并行、并发)
|
4天前
|
安全 Java
多线程(CAS, ABA问题, Runnable & Callable & 僵尸线程 & 孤儿进程)
多线程(CAS, ABA问题, Runnable & Callable & 僵尸线程 & 孤儿进程)
14 1
|
5天前
|
消息中间件 Java 调度
Java多线程基础-3:进程与线程间的区别的联系
进程是操作系统中运行的应用程序,具有独立内存空间,包含代码、数据和堆栈,是资源分配的最小单位,而线程是CPU调度的最小单位,是进程内的执行任务,多个线程可共享进程资源。
16 0
|
5天前
|
IDE Java 开发工具
"如何使用 jconsole 查看Java进程中线程的详细信息? "
当Java程序运行时,其中的一些线程也正在执行。我们可以用第三方工具 jconsole 来查看Java进程中线程的执行情况和详细信息,这有助于我们对多线程编程的理解。
13 0
|
5天前
|
消息中间件 Java C++
"Java多线程基础-2:简介虚拟地址空间——保障进程间独立性的机制 "
如何保障进程之间这样的独立性?操作系统采用了“虚拟地址空间”的方式。
12 0
|
5天前
|
存储 Java 调度
Java多线程基础-1:通俗简介操作系统之进程的管理与调度
操作系统是一个复杂的软件,具备许多功能。其中,进程的管理与调度是与我们密切相关的。本文将对操作系统功能中进程管理与调度作出介绍。
18 0
|
8天前
|
调度
进程和线程的区别和联系
进程和线程的区别和联系
15 0
|
8天前
|
算法 调度
【操作系统】处理机调度的基本概念和三个层次、进程调度的时机和方式、调度器、闲逛线程
【操作系统】处理机调度的基本概念和三个层次、进程调度的时机和方式、调度器、闲逛线程
22 3

相关实验场景

更多