进程和线程(简单篇)

1.进程的概念

进程(Process)是计算机中的一个实体,是具有一定独立功能的程序关于某个数据集合上的一次运行活动,也是系统进行资源分配和调度的一个独立单元。进程是程序在处理机上的一次执行过程,具有生命周期,它动态地被创建,并被调度执行,执行完成后消亡。进程是资源分配的基本单位,它拥有自己的地址空间和各种资源,如内存、文件句柄等。

2.线程的概念

线程(Thread)也被称为轻量级进程,它是比进程更小的活动单位,是进程中的一个执行路径或实体。线程是处理机调度的基本单位,它只能和其他线程共享进程的资源,而本身并没有任何资源(除了运行中必不可少的资源,如线程ID、计数器、寄存器集合和堆栈)。一个进程可以拥有多个线程,这些线程共享该进程的所有资源。

上面的文字对大多数读者来说,还是莫过于难理解了,现在小编用大白话给大家解释一下,帮助大家理解线程和进程大概是什么。
进程就像是计算机中的一个“大任务”,它包含了程序运行所需要的所有资源,比如程序代码、数据、文件等。每个进程都像是计算机中的一个独立“盒子”,里面装着运行这个程序所需的一切。
举个栗子:想象你正在使用电脑同时运行着浏览器、音乐播放器和文档编辑器。这三个程序分别对应了三个进程。每个进程都独立地运行在自己的“盒子”里,互不干扰。浏览器进程负责显示网页,音乐播放器进程负责播放音乐,文档编辑器进程则负责编辑文档。

线程则是进程中的一个“小任务”或“执行流”。一个进程可以包含多个线程,这些线程共享进程的资源,但各自执行不同的任务。线程是CPU调度的基本单位,CPU会轮流给每个线程分配时间片,让它们有机会执行自己的任务。
继续上面的栗子,假设你在浏览器进程中打开了多个网页标签。每个网页标签都可以看作是一个线程。这些线程共享浏览器进程的资源(如内存、网络连接等),但各自负责加载和显示不同的网页内容。CPU会轮流给这些线程分配时间(时间片),让它们能够同时(或看似同时)加载和显示网页。

3. 进程和线程的组成

3.1 进程的组成

在这里插入图片描述

3.2 线程的组成

一、基本组成部分

  1. 线程ID:线程标识符(Thread ID),用于唯一标识一个线程。
  2. 当前指令指针(PC):也称为程序计数器(Program Counter),用于存储线程当前正在执行的指令的地址。
  3. 寄存器集合:线程在执行过程中需要使用的各种寄存器,包括通用寄存器、特殊功能寄存器等。这些寄存器用于存储临时数据、操作结果、控制信息等。
  4. 堆栈:堆栈是线程中用于存储局部变量、方法调用参数、返回值以及控制流程的重要数据结构。每个线程都有自己独立的堆栈,以保证线程间的数据隔离和安全性。
    二、其他组成部分
    除了上述基本组成部分外,线程还可能包括其他一些辅助性的组成部分,如:
  5. 线程状态:线程在执行过程中会经历不同的状态,如新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)和终止(Terminated)等。这些状态反映了线程的生命周期和当前执行状况。
  6. 线程优先级:操作系统会根据线程的优先级来调度线程的执行。优先级高的线程更容易获得CPU资源并执行。
  7. 线程属性:包括线程的名称、所属的进程、是否可守护(Daemon)等。这些属性用于描述线程的基本特征和行为。

4. 进程和线程的特点

4.1 进程的特点

  1. 独立性:进程是独立的每个进程有自己的地址空间、文件描述符等资源。
  2. 动态性:进程在其生命周期内是动态变化的,包括创建、运行、阻塞、挂起和终止等状态。
  3. 并发性:多个进程可以在系统中并发执行,但并发并不意味着并行(除非在多核CPU上)。

4.2 线程的特点

  1. 共享性:同一进程内的多个线程共享该进程的资源,如内存、文件描述符等。
  2. 轻量级:线程的创建、销毁和切换的代价通常比进程小得多。
  3. 并发性:多个线程可以在同一进程内并发执行,提高程序的执行效率和响应速度。

5.进程和线程的区别

5.1 资源占用
进程拥有独立的内存空间和系统资源,而线程共享进程的资源。
进程切换时,需要保存和恢复整个进程的状态,包括内存、文件描述符等,而线程切换时只需保存和恢复线程的状态,包括栈、寄存器等。
5.2 通信方式
进程间通信(IPC)需要通过操作系统提供的机制,如管道、消息队列、共享内存等。
线程间通信相对简单,因为它们共享进程的内存空间,可以直接读写共享变量或使用线程特有的通信机制(如条件变量、信号量等)。
5.3 并发性
进程可以并发执行,但由于资源独立性和切换代价较高,通常用于不同程序或服务的并发。
线程更适合于同一程序内多个任务的并发执行,可以提高程序的执行效率和响应速度。

6. 并发和并行

并发:同一时刻,多个任务交替执行,造成一种“貌似同时”发生的错觉,单核CPU执行多任务叫做并发。
并行:同一时刻,多个任务同时执行,多核CPU同时执行,实现并行。(下列图示)

在这里插入图片描述

7. PCB

PCB是进程存在的唯一标识,PCB描述了关于进程的相关属性信息。
在这里插入图片描述

8. 补充事项

  1. 在系统中,进程是通过PCB这样的结构体来描述的,通过链表的形式来组织的。
  2. 对于系统来说,线程,同样也是通过PCB来描述的。
  3. 进程是由 一个/组 线程组成的,一个线程由一个PCB来描述,所以一个进程其实是一 个/组 PCB。
  4. 一个进程至少包含有一个线程。
  5. 如果有多个线程在一个进程中,每个线程,都有自己的状态,优先级,上下文,记账信息,每个都会各自独立的在CPU上调度执行。
  6. 线程比进程轻量主要是在于,在创建进程的时候,系统会给进程分配资源,而创建线程便可以省去创建资源,只需要与其他线程分配资源。也省去了“释放资源”。

9.注意事项

多个线程之间可能会相互影响,一旦其中某个线程发生抛出异常,可能会把其他所以线程均带走。
多个进程之间不会相互影响,某个进程崩溃了,不会影响到其他的进程(也常把这点称为“进程的隔离性”)。

以上就是小编为大家分享的全部内容,希望对大家有所帮助~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3226921.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

react学习——24redux实现求和案例(精简版)

1、目录结构 2、count/index.js import React, {Component} from "react"; //引入store,用于获取数据 import store from ../../redux/store export default class Count extends Component {state {count:store.getState()}componentDidMount() {//监测redux中的…

推荐一款功能强大的 GPT 学术优化开源项目GPT Academic:学术研究的智能助手

今天,我将向大家介绍一个强大的开源项目—GPT Academic,它或许正是你一直在寻找的理想工具。 已一跃成为 60.4k Star 的热门项目 GPT Academic 目前在 GitHub 上已经揽获了 60.4k 的 Star,这不仅反映了它的受欢迎程度,更证明了它…

初阶C++(三)

初阶C(三) 指针和引⽤的关系inline介绍对inline的运用宏函数与inline关系nullptr NULL在C中有歧义nullptr引用 指针和引⽤的关系 C中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥,引⽤是弟弟,在实践中他们相辅相成,…

【堆 优先队列】1354. 多次求和构造目标数组

本文涉及知识点 堆 优先队列 LeetCode1354. 多次求和构造目标数组 给你一个整数数组 target 。一开始&#xff0c;你有一个数组 A &#xff0c;它的所有元素均为 1 &#xff0c;你可以执行以下操作&#xff1a; 令 x 为你数组里所有元素的和 选择满足 0 < i < target.…

《财经态度》︱行业领跑品牌格行创始人刘永先独家揭秘:格行随身WiFi如何抗内卷,成就品质与服务双重骄傲?随身WiFi推荐第一名!

近两年人们对无线连接的需求急剧增加&#xff0c;特别是在旅行、出差、户外活动等场景下&#xff0c;随身WiFi以其便捷性、高效性和广泛适应性&#xff0c;成为满足这一需求的理想选择。随之而来的&#xff0c;随身WiFi竞争也日益激烈。众多厂商纷纷涌入&#xff0c;通过技术创…

Windows 下安装 Memcached

Memcached 安装包下载 官网上并未提供 Memcached 的 Windows 平台安装包。 我们可以使用以下链接来下载&#xff0c;你需要根据自己的系统平台及需要的版本号点击对应的链接下载即可&#xff1a; 32位系统 1.2.5版本&#xff1a;http://static.jyshare.com/download/memcache…

【Vue3】使用vite创建vue项目

一、安装Nodejs 参考文章https://blog.csdn.net/DX390609/article/details/140305585?spm1001.2014.3001.5502 二、创建项目 在要创建的目录下打开命令行输入&#xff1a; npm create vuelatestvue项目创建成功&#xff1a; 三、安装vue插件 vscode打开项目文件夹&…

【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树

目录 1 -> 红黑树 1.1 -> 红黑树的概念 1.2 -> 红黑树的性质 1.3 -> 红黑树节点的定义 1.4 -> 红黑树的结构 1.5 -> 红黑树的插入操作 1.6 -> 红黑树的验证 1.8 -> 红黑树与AVL树的比较 2 -> 红黑树模拟实现STL中的map与set 2.1 -> 红…

【代码随想录07】344.反转字符串 541. 反转字符串II 54.替换数字

目录 344. 反转字符串题目描述做题思路参考代码 541. 反转字符串 II题目描述参考代码 54. 替换数字题目描述参考代码 344. 反转字符串 题目描述 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空…

昇思25天学习打卡营第17天|应用实践之SSD目标检测

基本介绍 今天要学习的内容是计算机视觉领域中的目标检测任务。与图像分类相比&#xff0c;目标检测更难&#xff0c;因为目标检测不仅要检测出图片中的物体的类别&#xff0c;还要检测出该物体的位置。现主流的目标检测算法大致可分为两种&#xff0c;一种是基于CNN的&#xf…

UML时序图的绘制

一分钟学会绘制时序图 目录 1、简单了解时序图元素 2、进入实例理解 实例1 实例2 3、四种常用的组合片段 Opt:包含一个可能发生或不发生的序列 Alt:片段中两个只会发生其一 Loop:片段可重复一定次数 Par:片段中事件可多线程并行处理 4、分清几个消息 同步消息&#…

【CUDA】 Trust基本特性介绍及性能分析

Trust简介 Thrust 是一个实现了众多基本并行算法的 C 模板库,类似于 C 的标准模板库(standard template library, STL)。该库自动包含在 CUDA 工具箱中。这是一个模板库,仅仅由一些头文件组成。在使用该库的某个功能时,包含需要的头文件即可。该库中的所有类型与函数都在命名空…

体验完这款售价29999元起苹果新品,我大受震撼

讲道理&#xff0c;数码圈已经很久没有出现过让人耳目一新的产品了。 整个圈子近些年各家新品逻辑给我的一种感觉是普遍主打循规循距&#xff0c;用高情商话来说那叫稳扎稳打不易出错&#xff0c;而低情商嘛&#xff0c;说白了叫创新精神严重缺失。 「科技最后以换皮为准」这…

Java 8革新:现代编程的全新标准与挑战

文章目录 一、方法引用二、接口默认方法三、接口静态方法四、集合遍历forEach()方法 一、方法引用 方法引用是Java 8中一种简化Lambda表达式的方式&#xff0c;通过直接引用现有方法来代替Lambda表达式。 方法引用使得代码更加简洁和易读&#xff0c;特别是在处理函数式接口时&…

揭秘小红书矩阵系统:源码助力一键自动发布,多平台管理,效率飙升!

在数字化时代&#xff0c;社交媒体已成为品牌和个人展示自我、推广产品的重要舞台。小红书&#xff0c;作为备受年轻人喜爱的社交平台&#xff0c;其影响力不容小觑。然而&#xff0c;面对日益激烈的竞争&#xff0c;如何高效地在小红书上发布内容、管理多平台账号&#xff0c;…

数模打怪(一)之层次分析法

一、什么是层次分析法 层次分析法&#xff08;AHP&#xff09;主要用于解决评价类问题&#xff08;可打分&#xff09; 比如哪种方案更好、哪位运动员更优秀等 二、层次分析法的三个步骤 1、建立层次结构 分析题目&#xff0c;找出评价类问题的三要素&#xff1a; &#x…

通过Xftp向linux系统传文件,出现Permission is not allowed错误怎么办?

使用xftp出现如下情况&#xff0c;就是说明权限不够。什么权限呢&#xff1f;是我们准备传输的linux系统上面的目标文件夹的权限不够&#xff0c;给linux上面这个目标文件夹提升权限即可。 注意点&#xff1a; 777后面跟的是目录名&#xff0c;比如你想往/usr/local/src这个目…

MySQL 数据库基础概念

一、什么是数据库&#xff1f; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建&#xff0c;访问&#xff0c;管理&#xff0c;搜索和复制所保存的数据。 我们也可以将数据存储在文件中&…

用python生成词频云图(python实例二十一)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.词频云图 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&a…

Python导包问题

文章目录 1问题背景2参考资料及分析3可以兼顾的方法 1问题背景 需要在当前文件中导入当前文件的上级目录下某个文件夹中的文件&#xff0c;如下图所示 即在CBOW.py文件中导入utils\Embedding.py文件中的类&#xff1b; 2参考资料及分析 如何将Python的上级目录的文件导入&am…