首页 > 系统相关 >进程与线程

进程与线程

时间:2023-09-22 20:22:05浏览次数:37  
标签:操作系统 一个 线程 进程 执行 CPU

目录


开始前先看一组非常传神的图例,相信可以帮助你更好理解进程与线程的概念:

img

进程

定义

什么是进程?

进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是计算机中正在运行的程序的实例,包括程序计数器、寄存器和程序变量的当前值。

特点

进程具有哪些特点?

  • 进程之间相互独立,每个进程运行在自己的地址空间中,互不干扰。

  • 进程具有独立的执行顺序和执行状态,可以创建、终止、挂起、恢复和等待其他进程。

  • 进程拥有自己的进程控制块(Process Control Block,PCB),用于记录进程的状态信息,如进程ID、寄存器、内存分配和打开的文件等。

  • 进程是操作系统进行资源分配和调度的基本单位(CPU除外,线程是处理器任务调度和执行的基本单位)。

  • 进程之间相互独立,通过进程间通信(Inter-Process Communication,IPC)来实现数据共享和通信。

  • 每个进程都至少包含一个线程。

线程

定义

什么是线程?

线程是进程中的实体,是进程的执行单元,是cpu调度和分派的基本单位。

它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可以和同属于一个进程的其他线程共享进程所拥有的的全部资源。一个进程可以包含多个线程,它们共享进程的地址空间和系统资源。

特点

线程具有哪些特点?

  • 线程是进程中的执行单元,一个进程可以包含多个线程。
  • 线程间共享进程的资源,包括内存、文件句柄等。
  • 线程是并发执行的最小单位。

进程与线程的联系与区别

img

联系

  • 每个进程都至少包含一个线程。一个进程可以包含多个线程,它们共享进程的地址空间和系统资源。
  • 一个线程可以创建和撤销另一个线程。
  • 同一个进程中的多个线程之间可以并发执行。

区别

  • 进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
  • 一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
  • 每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
  • 一个进程崩溃后,在保护模式下其他进程不会被影响,但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮。

img

扩展

并行与并发

一个CPU在一个瞬间只能处理一个任务。

但为什么在我们人类视角,哪怕是单核心计算机也能同时做很多事情,比如同时听音乐和浏览网页,作为整个系统唯一可以完成计算任务的 CPU 是如何保证两个进程“同时进行”的呢?

时间片轮转调度!

每个进程会被操作系统分配一个时间片,即每次被 CPU 选中来执行当前进程所用的时间。时间一到,无论进程是否运行结束,操作系统都会强制将 CPU 这个资源转到另一个进程去执行。

为什么要这样做呢?

因为只有一个单核 CPU,假如没有这种轮转调度机制,那它该去处理写文档的进程还是该去处理听音乐的进程?无论执行哪个进程,另一个进程肯定是不被执行,程序自然就是无运行的状态。如果 CPU 一会儿处理 word 进程一会儿处理听音乐的进程,起初看起来好像会觉得两个进程都很卡,但是 CPU 的执行速度已经快到让人们感觉不到这种切换的顿挫感,就真的好像两个进程在“并行运行”。

img

随着多核心CPU的出现,真正的并行得以实现。

img

所谓的进程上下文,就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。

相关参考

  1. 线程与进程,你真的理解了吗
  2. 进程与线程的关系和区别

标签:操作系统,一个,线程,进程,执行,CPU
From: https://www.cnblogs.com/lanwah/p/17723283.html

相关文章

  • 假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时
    假设a是一个由线程1和线程2共享的初始值为0的全局变量,则线程1和线程2同时执行下面的代码,最终a的结果不可能是()booleanisOdd=false;for(inti=1;i<=2;++i){if(i%2==1)isOdd=true;elseisOdd=false;a+=i*(isOdd?1:-1);}A:-1B:-2C:0D:1......
  • C# 指定物理目录下载文件,Response.End导致“正在中止线程”异常的问题
    https://blog.51cto.com/u_15116285/5964873https://blog.csdn.net/phphot/article/details/4211921https://www.codenong.com/20988445/https://www.dbmng.com/art-2500.html现象:通过浏览器下载pdf文件,下载可以正常下载,可是却会抛出异常,提示正在中止线程。查了资料,能看懂的......
  • CentOS7安装Supervisor进程守护,并且创建项目
    安装Supervisor#执行epel-releaseepel-release会配置Supervisor的源sudoyum-yinstallepel-release#安装Supervisorsudoyum-yinstallsupervisor#通过配置文件来启动supervisorsudosupervisord-c/etc/supervisord.conf#启动supervisorctlsudosupervisorctl......
  • 记一个多线程调用同一个函数引发的数据冲突问题
    main.py负责接收请求,异步起线程调用高度离散的B(a、b、c...).py类文件,B(a、b、c...).py类文件在执行结束后会统一调用C.py文件中的一个函数规范处理结果,C.py本来的用途是解耦提高代码复用,但在高并发情况下出现了数据冲突的问题。即只有B(a).py才会产生的结果给写进了只会调用B(b).......
  • 深入浅出线程池 | 京东云技术团队
    一、线程1、什么是线程线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。2、如何创建线程2.1、JAVA中创建线程/***继承Thread......
  • 支付宝一面:多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!
    背景介绍1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚。2,在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行......
  • multiprocessing:Python像线程一样管理进程
    前言multiprocessing库是基于threadingAPI,它可以把工作划分为多个进程。有些情况下,multiprocessing可以作为临时替换取代threading来利用多个CPU内核,相应地避免Python全局解释器锁所带来的计算瓶颈。下面,我们来看看multiprocessing库创建进程与threading库有多像。创建一个进......
  • 7.1 实现进程内存块枚举
    在Windows操作系统中,每个进程的虚拟地址空间都被划分为若干内存块,每个内存块都具有一些属性,如内存大小、保护模式、类型等。这些属性可以通过VirtualQueryEx函数查询得到。该函数可用于查询进程虚拟地址空间中的内存信息的函数。它的作用类似于Windows操作系统中的TaskManager中......
  • 7.2 通过API创建新进程
    创建新的进程是Windows程序开发的重要部分,它可以用于实现许多功能,例如进程间通信、并行处理等。其中,常用的三种创建进程的方式分别是WinExec()、ShellExecute()和CreateProcessA(),这三种创建进程的方式各有特点。如果需要创建简单进程或从其他程序启动新进程,可以使用WinExec()或Sh......
  • C++系列十:日常学习-进程间通讯
    目录前言介绍照片:后续:前言V~~~V。介绍进程间通讯(Inter-ProcessCommunication,IPC)是操作系统中的一个重要概念,用于不同进程之间的数据传输和交互。有多种方式可以实现进程间通讯,以下是其中一些常见的方式:管道(Pipe):管道是一种单向通信方式,通常用于具有父子关系的进程之间。它分......