简单理解 进程 & 线程

2023-11-16

线程与进程之间的区别和联系

  1. 进程包含线程。都是为了实现并发编程的方式。线程比进程更轻量。

  2. 进程是系统分配资源的基本单位,线程是系统调度执行的基本单位。

    创建进程的时候把分配资源的工作给做了,后续创建线程就可以直接公用之前的资源。

  3. 进程有独立的地址空间,彼此之间不会相互影响,体现进程的独立性=>系统稳定。

    多个线程公用一份地址空间,一个线程一旦抛出异常,就会导致整个进程异常结束。=>多个线程之间容易相互影响。


进程&线程之间的理解

进程

进程简单来说就相当于正在运行的程序,每个进程程都有一个独立的内存空间,并且可以并发执行,多个线程之间不共享数据。(一个进程对应多个PCB)

通过分配资源来执行这个程序包含的指令的过程叫做进程。(进程是在CPU 上执行的)

image-20230814102703820

缺点:大规模的创建和销毁的资源开销是比较大的。

​ 开销是指:资源的申请和释放。

​ 资源是指:内存资源和文件描述符表。

优点:由于每个进程是独立拥有一块资源空间的,所以他们相对独立,一个进程挂了,对其他的进程不会有什么影响。

进程管理 PCB

通常计算机中大概率包含很多个进程,进程多了,要如何管理呢?

针对计算机中的进程管理采用先描述,再组织的方式进行。

  • 描述:使用一个专门的结构体来记录一个进程里面的各个属性。(PCB进程控制块)
  • 组织:通常用双向链表这样的方式来进行组织。(针对Linux)

PCB包含信息:

  1. pid进程标识

  2. 内存指针:主要存储的就是从exe可执行文件中加载过来的 指令 和 数据。

    ​ 还要保存一些运行程序的中间结果。

  3. 文件描述符表:用来记录当前这个进程在使用哪些文件(fopen、fread、fclose)

  4. 进程调度相关属性

    1. 状态:进程在系统中有很多状态,其中最关键的就是 就绪 和 阻塞 状态。
    2. 优先级:系统给进程进行调度的时候,也不完全是公平的,也会根据优先级的不同,来决定时间分配的权衡。把系统资源调配给更重要的进程上了。
    3. 上下文:这些进程都是轮着上CPU的,一次运行不完,就需要保证下次上CPU运行的时候,接着上次未运行完的位置,继续往后运行。
    4. 记账信息:相当于一个统计信息,会统计每个进程在CPU上都执行了多久,执行多少次。

并行、并发

我们说过进程是在CPU上执行的,现在的CPU大多都是六核十二线程/八核十六线程的,如果我们有几十个、几百个线程需要执行,这显然是不够用的。因此就会有并行、并发机制。

  • 并行:同一时刻,两个进程,同时运行在两个CPU逻辑核心上。
  • 并发:两个进程,同时在一个逻辑核心上,轮流进行。由于CPU切换进程的速度极快。微观上,这俩进程是串行执行的。宏观上,看起来这俩就是"同时"执行的。

由于感知不到是哪种方式调度,并且这两种调度方式,宏观上体现效果都是一样的。通常也会用 “并发” 这个词代指 “并行” 和 “并发”。

线程

其实所谓的线程也可以被称为一种轻量级的进程。

一个线程被分配了一个pcb,没有分配后续的 内存、硬盘…等资源,但线程在进程内部,可以使用进程分配好的资源。(因此进程和线程之间的关系可以认为是 进程 包含 线程)

总结出以下特点:

  1. 一个进程至少包含一个线程。
  2. 相比于进程,线程由于是共用同一份资源空间所以消耗资源更少、速度更快。

缺点:

  1. 在共用资源空间中,相互之间的影响更大了,一个线程挂了,可能会导致这个整个进程的异常结束。
  2. 当多个线程共同访问同一个公共资源的时候,也可能会出现冲突,出现线程安全问题。

这里的进程中也不能包含无限个线程,其取决于CPU的个数等。

一个进程中的多个线程,共同复用了这个进程中的各种资源(内存、硬盘),但是这些线程各自独立的在cpu上进行调度

因此,线程就可以既能够完成 “并发编程” 的效果,又可以 以比较轻量的方式来进行

可以通过下图来简单理解线程、进程之间的关系和工作方式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ThWgWdZB-1692328761636)(C:\Users\28779\AppData\Roaming\Typora\typora-user-images\image-20230814121758609.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KgktslTb-1692328761637)(C:\Users\28779\AppData\Roaming\Typora\typora-user-images\image-20230814122357624.png)]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单理解 进程 & 线程 的相关文章

  • android pull 解析xml

    Pull简介 1 常见的XML解析方式有三种 DOM SAX Pull Android系统中推荐使用Pull 2 Pull解析器是一个开源的Java项目 Android系统内部解析XML文件均为此种方式 也可用于JavaEE项目 3 And
  • 网络编程3——TCP Socket实现的客户端服务器通信完整代码(详细注释帮你快速理解)

    文章目录 前言 一 理论准备 Socket套接字是什么 TCP协议的特点 二 TCP 流套接字提供的API ServerSocket API Socket API 三 代码实现请求响应式 客户端服务器 服务器 客户端 疑惑解答 为什么服务器
  • maven学习总结

    众所周知 maven的两大作用是项目构建和依赖管理 除此之外 基于多模块项目 maven常用的功能还有模块化管理 项目构建 Maven是一个构建工具 可以根据项目中的配置文件 pom xml 来自动执行项目的构建过程 它可以将源代码编译 运
  • 【SpringBoot】简介及传统的 Spring 框架:对比和分析

    哈喽 哈喽 大家好 我是你们的老朋友 保护小周 今天给大家带来的是 SpringBoot 的简介 SpringBoot 项目的创建 相较于 Spring 框架的优点 1 快速的集成框架 2 内置运行容器 快速的部署项目 3 摒弃繁琐的 xm
  • 零基础自学计算机方法大全

    欢迎入读 尚学堂给同学们带来全新的Java300集课程啦 java零基础小白自学Java必备优质教程 学习从来没有捷径 只有学成之后才会一切是那么简单 想要学会编程 一定要有坚定的信念 1 选方向 定目标 首先你需要做好功课 了解计算机的分
  • springWEB搭建

    概述 SpringWEB就是spring框架里得一个模块 SpringWeb的前身是SpringMVC springMVC介绍 在之前的后端三大架构 Controller 控制层 包含了servlet 对数据的接收 处理 响应 Model
  • Java会话技术

    会话技术 会话指的是客户端浏览器和服务端之间的度偶次请求和响应 当打开浏览器 访问网站地址后 会话开始 当关闭浏览器 或者到了过期时间 会话结束 就像打电话只要不挂电话就是一次会话 会话过程中产生的数据可以通过会话技术Cookie Sess
  • Spring系列之@Aspect中5中通知详解

    Aspect中有5种通知 Before 前置通知 在方法执行之前执行 Aroud 环绕通知 围绕着方法执行 After 后置通知 在方法执行之后执行 AfterReturning 返回通知 在方法返回结果之后执行 AfterThrowing
  • 黑马头条 热点文章实时计算、kafkaStream

    热点文章 实时计算 1 今日内容 1 1 定时计算与实时计算 1 2 今日内容 kafkaStream 什么是流式计算 kafkaStream概述 kafkaStream入门案例 Springboot集成kafkaStream 实时计算 用
  • 多线程(六):多线程案例

    多线程最最经典案例就是上一章的单例设计模式 当然除了单例设计模式 还有其他的案例 本章就 一一 来介绍 阻塞队列 这里是第一次提到阻塞队列这个东西 简单介绍一下 什么是阻塞队列 阻塞队列 BlockingQueue 是一个支持两个附加操作的
  • Java特训的第一天——开篇

    我是一名刚入门的Java菜鸟 我选择Java的原因是因为其语法简单 功能强大 从web 到桌面 到嵌入式 无所不能 下面我将谈一谈我对Java语言的认识 Java语言概述 关于Java的介绍网上有很详细的阐述 我在这里就不再细述了 下面只简
  • Java多线程(四):什么是死锁以及如何解决死锁

    目录 1 什么是死锁 2 死锁产生的原因 3 如何解决死锁问题 3 1 改变环路等待条件 3 2 破坏请求并持有条件 1 什么是死锁 死锁 是指两个或两个以上的进程在执行过程中 由于竞争资源或者由于彼此通信而造成的一种阻塞的现象 若无外力作
  • java前后端传递日期类型不一致的转换问题

    今天在做学生信息的展示时发现展示的日期和数据库中日期不同 本来最开始是用SimpleDateFormat进行转换的 但是转换之后的是字符串类型的 与date类型对不上 所以就上网查了一下 发现可以用 DateTimeFormat和 Json
  • 利用Java EE相关技术实现一个简单的Web聊天室系统

    利用Java EE相关技术实现一个简单的Web聊天室系统 1 编写一个登录页面 登录信息中有用户名和密码 分别用两个按钮来提交和重置登录信息 2 通过请求指派来处理用户提交的登录信息 如果用户名为本小组成员的名字且密码为对应的学号时 跳转到
  • Spring Boot框架

    目录 一 Spring Boot 1 Spring Boot优点 2 创建Spring Boot 3 Spring Boot配置文件 1 配置文件的作用 2 properties文件格式 3 yml文件的格式 4 properties vs
  • MyBatis中Mapper接口和dao区别是什么?

    MyBatis中的mapper接口相当于以前的dao 但是区别在于 mapper仅仅是接口 我们不需要 提供实现类 public interface UserMapper 添加用户信息 int insertUser
  • 【计算机开题报告】家具销售库存管理信息系统

    一 选题的目的 意义及相关研究动态和自己的见解 随着当今社会信息化的发展 电子自动化办公越来越为各人所重视 它能有效地收集 处理各种信息 极大地提高了办事效率 而计算机技术各种软件工作平台不断的发展 又为电子自动化办公的实现提供了良好的前景
  • 【计算机毕业设计】毕业生就业管理微信小程序_lm9q0

    腾讯公司在2017年1月19日发布了一款不需要下载 不需要卸载 不需要存储的软件叫微信小程序 受到了很多人的喜欢 微信小程序自2017年发布至今 依托微信的社交属性和庞大的用户基数 已经渗透到生活的方方面面 1 微信小程序可以将基于微信平台
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 【计算机毕业设计】北京医疗企业固定资产管理系统的设计与实现 _4c4c1

    近年来 人们的生活方式以网络为主题不断进化 北京医疗企业固定资产管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工

随机推荐

  • actuator--基础--6.1--端点解析--health端点

    actuator 基础 6 1 端点解析 health端点 代码位置 https gitee com DanShenGuiZu learnDemo tree master actuator learn actuator01 1 health
  • java队列模拟_Java模拟队列

    用Java模拟队列的出队和进队 1 代码 Java 代码 package com stackANDqueue import java io DataInputStream import java io IOException 循环队列的入队
  • redis 十二. 分布式锁

    目录 一 分布式锁概述 二 redis 锁基础版示例 三 redis 锁进阶 Redlock 四 Redlock 分析 解决集群环境master宕机数据不一致锁不住的问题 锁的定时续期 watchdog源码分析 锁的可重入性分析 释放锁分析
  • ES6 for...in 和 for...of 的区别

    for in 和 for of的区别 遍历数组时 当给数组加上属性时 遍历对象时 总结 for of 是ES6新引入的特性 修复了 ES5 引入的 for in 的不足 关于两者之间的区别 下面列举了一些例子 遍历数组时 let arr 1
  • 5g手机怎么开5g网络

    确保您已经办理了5G套餐 且所处地区有5G网络信号 这样才能接收并使用到5G网络 以华为手机为例 打开 设置 移动网络 点击 启用5G 开关 状态栏上的信号图标就会出现一个5G图标 具体介绍如下 1 首先打开手机 设置 找到并点击 移动网络
  • 【状态估计】卡尔曼滤波器、扩展卡尔曼滤波器、双卡尔曼滤波器和平方根卡尔曼滤波器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本文包括 1 标准卡尔曼滤波器 2 扩展卡
  • QT打开文件并显示文件内容

    QT打开文件并显示文件内容 功能描述 当点击一个按钮的时候 实现打开指定类型的文件 并在另一个子窗口中显示文件的内容 核心函数分析 QString QFileDialog getOpenFileName QWidget parent Q N
  • pandas、numpy对txt、xls、csv的文件读取总结

    文件读取 1 csv文件读取 import pandas as pd df1 pd read csv r data HeightWeight csv print df1 import numpy as np data np loadtxt
  • 华为OD机试 - 新员工座位(Java)

    题目描述 工位由序列F1 F2 Fn组成 Fi值为0 1或2 其中0代表空置 1代表有人 2代表障碍物 1 某一空位的友好度为左右连续老员工数之和 2 为方便新员工学习求助 优先安排友好度高的空位 给出工位序列 求所有空位中友好度的最大值
  • 详解Spring的循环依赖问题、三级缓存解决方案源码分析

    0 基础 Bean的生命周期 在Spring中 由于IOC的控制反转 创建对象不再是简单的new出来 而是交给Spring去创建 会经历一系列Bean的生命周期才创建出相应的对象 而循环依赖问题也是由Bean的生命周期过程导致的问题 因此我
  • memory order In x86 asm, ordinary loads and stores already have acquire / release semantics

    Acquire and Release Semantics Generally speaking in lock free programming there are two ways in which threads can manipu
  • 过采样对分类精度的影响有哪些

    过采样是一种在训练分类器时用来增加少数类样本数量的技术 它可以通过复制原有的少数类样本来增加样本数量 过采样可以提高分类精度 因为模型在训练中能够更好地学习少数类样本的特征 然而 过采样也可能导致过拟合 如果复制的样本数量过多 模型可能会过
  • 【华为OD机试真题】过滤组合字符串(C++&java&python)100%通过率 超详细代码注释 代码解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 过滤组合字符串 题目描述 数字0 1 2 3 4 5 6 7 8 9分别关联 a z 26个
  • k8s配置StatefulSet解读

    什么是StatefulSet 直接参考原博客 k8s配置StatefulSet StatefulSet和Deployment一样 可以保证集群中运行指定个数的pod 也支持横向扩展 但每个pod都是不可互换的 无论pod被怎样调度 它们的标
  • Python学习-----无序序列1.0(字典的创建、查看、添加、修改、删除/替换)

    目录 前言 字典是什么 字典的特点 1 字典的创建 1 直接创建 2 dict 函数创建 2 字典的查询 1 get 函数 2 获取字典一组内容 3 字典键值对的添加 1 直接添加 2 setdefault 函数 4 字典的修改 updat
  • 基础回顾5

    JVM JRE JDK JVM表示java虚拟机 Java程序需要运行在虚拟机上 不同平台有自己的虚拟机 所以java可以实现跨平台运行 JRE表示java运行环境 包括java虚拟机和一些核心类库 核心类库主要是java lang包 ja
  • 准考证打印系统关闭怎么办_自考准考证错过打印时间,怎么办?

    点击上方蓝色字关注我们 后台回复 学历 1 5年快速拿正规名校学历 后台回复 优惠 2000元轻松入学升专本 后台回复 冲刺 获取自考备考冲刺模拟卷 后台回复 突击 0元抢占考前突击营名额 1 准考证一般什么时候开始打印 答 自学考试准考证
  • nginx php 错误日志,nginx、php-fpm、php 错误日志的关系

    nginx php fpm php 三者的配置文件中都有 error log 项 指定各自错误日志的保存路径 理论上它们三者的错误应该不会重合 即 nginx error log 记录的是 nginx 进程自己的错误 php fpm err
  • Linux 帧缓冲子系统详解:LCD介绍、framebuffer驱动框架、LCD驱动源码分析

    1 LCD显示屏基础知识介绍 请看博客 嵌入式开发 S5PV210 LCD显示器 2 内核帧缓冲子系统 2 1 功能介绍 1 帧缓冲 framebuffer 是 Linux 为显示设备提供的一个接口 它把显示设备描述成一个缓冲 区 允许应用
  • 简单理解 进程 & 线程

    文章目录 线程与进程之间的区别和联系 进程 线程之间的理解 进程 进程管理 PCB 并行 并发 线程 线程与进程之间的区别和联系 进程包含线程 都是为了实现并发编程的方式 线程比进程更轻量 进程是系统分配资源的基本单位 线程是系统调度执行的