当前位置: 首页 > news >正文

【多线程】进程与线程

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

在这里插入图片描述

文章目录

  • 1. 操作系统
  • 2. 进程
    • 2.1 进程是什么
    • 2.2 进程管理
    • 2.3 进程调度
    • 2.3 内存管理
    • 2.4 进程间通信
  • 3. 线程
    • 3.1 线程是什么
    • 3.2 多线程编程
    • 3.3 线程与进程联系与区别

1. 操作系统

概念】是一个软件,是一组做计算机资源管理的软件统称,非常复杂,所以操作系统本身是一个很大的话题(这里简单了解,引入进程概念)
常见的操作系统
在这里插入图片描述
基本功能
1)防止硬件被时空的应用程序滥用
2)向应用程序提供简单一致的机制来控制复杂低级硬件设备
在这里插入图片描述
对上】要给软件提供稳定的运行环境
对下】要管理好各种硬件设备
操作系统的功能非常多,其中一个与我们密切相关的功能模块—>进程管理
接下来让我们一起来看看,进程是什么吧~~~

2. 进程

2.1 进程是什么

进程】也称作任务一个运行起来的程序,就是进程~
在这里插入图片描述
这个.exe是一个可执行文件,即程序,当我们双击这个exe,这个程序微信就运行起来,在系统中形成一个进程
即进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看做程序的一次运行过程
基本单位进程是操作系统进行资源分配基本单位
(此处涉及到的资源包括不限于内存,硬盘,CPU等等)
在任务管理器中,我们可以看到电脑的进程,打开任务管理器的快捷键为Ctrl+Alt+Del,如图:
在这里插入图片描述
通过任务管理器,我们能看到系统中有如此多的进程都在跑着!那么进程有如此之多,如何去管理呢~

2.2 进程管理

所谓进程管理,即进程多了才需要管理,分为以下两步:

1)描述一个进程:使用结构体/类,表示一个进程的信息
2)组织这些进程:使用一定的数据结构,把这些结构体/对象放到一起

举一个生活中常见的栗子叭~
一个大型超市,有特别多的商品,超市需要管理这些商品,建立一个商品信息管理系统,需要做:
1)明确每个商品的相关信息(价格、生产日期等)
2)通过一定的数据结构将这些商品信息都组织起来(如通过表格等)

2.3 进程调度

进程调度概念】操作系统对CPU资源的分配,采用时间模式,不同的进程在不同的时间段去使用 CPU 资源即为进程调度~
先来了解进程的基本知识叭~
在Java中,我们通过类/对象描述这个特征,即每一个PCB对象代表一个在运行的程序即进程
进程类—> PCB(process control block)

class PCB {
//属性1 pid
//属性2 内存指针
//属性3 文件描述表
//属性4 进程调度信息
//...
}

操作系统再通过数据结构把PCB对象组织起来,往往使用双向链表来组织PCB对象,进程相当于链表中的节点,方便管理时进行增删改查的操作

  1. 创建一个进程,即创建一个链表的节点
  2. 销毁一个进程,即把链表的节点删除
  3. 遍历进程列表,即遍历链表

PCB中的属性非常多,在这里枚举4个核心的属性:
1)pid
每个进程需要有一个唯一的身份标识(如每个人都有独一无二的身份证~~)
2)内存指针
当前这个进程使用的内存是哪一部分(进程要跑起来,就需要消耗一定的硬件资源,比如内存~进程运行的时候,使用哪些内存上的资源)
3)文件描述符表
进程每次打开一个文件,就会产生一个"文件描述符",标识了这个被打开的文件,一个进程可能会打开很多文件,对应一组文件描述符,把这些文件描述符放到一个顺序表这样的结构,构成文件描述符表
4)进程调度信息
这一组属性都是描述和CPU资源相关的属性,这些属性都辅助进行进程调度
预备知识】先来了解了解CPU!
我们的程序能运行,全靠CPU,每一个程序相当于一组"二进制指令"的集合
CPU中的一个概念:核心数(在任务管理器中可以看到我们电脑的核心数)
在这里插入图片描述
这个表示16核32线程,即CPU里有16个核心,每个核心顶两个!16个人可以干32个人的活~
但是我们可以看到一个电脑上可以运行很多程序,不止这些,那么计算机是如何做的呢~
并行】同一时刻,两个核心同时执行两个进程,此时这两个进程就是并行执行的(强调同时)
并发】一个核心先执行进程1执行一会后再去执行进程2…只要这里切换进程的速度足够快,看起来进程1和2就是"同时"进行的
所以虽然只有这些核心,但是也可以同时执行很多很多个任务啦~
在计算机中,通过并行+并发的方式来完成的(由操作系统控制,我们感知不到的~)所以很多时候把并行+并发统称为并发!
进程调度意义】如上所述,进程调度就是为了解决电脑核心数是固定的但是电脑有很多程序要运行的问题~
A) 进程状态
简单认为进程状态主要是这两个:
就绪态】该进程已准备好,随时可以上CPU执行
阻塞态】该进程暂时无法上CPU执行
B)进程的优先级
进程之间的调度不一定是"公平"的,有的会优先调度(在现实生活中,我们也会将事情根据重要性排个序,有的事情就需要优先做~)
C) 进程的上下文
即描述当前进程执行到哪里的"存档记录",进程在暂时离开CPU时把当前运行的中间结果进行"存档",等下次进程回到CPU执行时,恢复之前的"存档",从上次的结果继续往后执行(即记录离开结果,这样回来时我可以从离开的地方继续执行)具体过程如下:
在这里插入图片描述
D)进程的记账信息
统计了每个进程在CPU上执行多久(这个可以作为调度的参考依据~)

2.3 内存管理

操作系统对内存资源的分配,采用空间模式,不同进程使用内存中的不同区域,互相之间不会干扰,相互独立的~
每个进程访问的内存地址并不是真实的物理内存地址,操作系统给进程分配的内存是以"虚拟地址空间"的方式进行分配的~
直接访问物理内存地址缺点】如果进程1内容改变则会可能会影响进程2的内存内容
(比如进程1数组下标越界、野指针情况等)
虚拟地址空间优点
在这里插入图片描述解释说明】站在进程角度,它们的代码操作的内存地址是图中0x00-0x33这一段,这里访问的内存就会被操作系统自动映射到真实的物理内存上,当然进程自己是感受不到实际物理内存地址是什么的,如果进程1代码出bug,就没有什么影响,因为任何一个内存操作都需要通过页表翻译,如果拿着这个地址发现页表没有这个地址,则不会翻译,也就不会修改真正物理内存,即不会对进程2的内存数据进行干扰
1)方便校验,当前地址是否有效
2)一个进程无法直接影响另一个进程的内存内容,每个地址都有自己独立的地址空间,具有独立性
3)大大提升操作系统的稳定性

2.4 进程间通信

进程是操作系统进行资源分配的最小单位,即各个进程互相之间是无法感受到对方存在的,是相互独立的,这样进程之间互相具备"隔离性",但有时候需要进程之间进行交互,相互配合~
进程间通信】即在隔离性前提下,找一个公共区域,让进程借助这个区域完成数据交换
实现方式】操作系统提供进程间通信具体实现方式,有很多种,如以下:
1)管道 2)共享内存 3)文件 4)信号 5)消息队列 6)网络 等等
其中网络是一种相对特殊的 IPC 机制,支持同主机也支持同一网络内部非同一主机,进行进程间通信

3. 线程

3.1 线程是什么

线程】是更轻量的进程,约定:一个进程中可以包含多个线程,此时这多个线程的每一个线程都是一个可以调度执行一个独立的"执行流",多个线程之间也是并发执行(多个线程可能是在多个CPU核心同时运行,也可能是在一个CPU核心上,通过快速调度进行运行),同时这些线程共用同一份进程的系统资源
即对于线程来说,系统资源已经分配好,创建线程就省下分配资源开销,但是创建进程则需要系统分配资源,较耗时~
为什么资源分配如此耗时
比如系统要给进程分配一块内存需要做的以及遇到的情况:
1)系统需遍历自己的空闲内存的表(数据结构) 找到差不多的空间,进行分配内存
2)很多进程都在向系统申请资源~但是系统进行资源分配时候,得一个个来,很耗时
为什么要线程
(1) 并发编程能更充分利用多核 CPU 资源,多进程编程和多线程编程都满足并发编程需求场景(并发编程即同一时刻要运行多个任务)
(2) 线程比进程更轻量,进程创建、销毁、调度成本高且速度慢不高效,线程则相反,线程创建、销毁、调度成本比进程~(只有在进程启动,创建第一个线程的时候,需花成本去申请系统资源,一旦进程创建完毕,后续再创建的线程,就不需要再申请资源,这样创建/销毁的效率大大提高)
(3) 在Java中不鼓励多进程编程,非常鼓励多线程编程~

3.2 多线程编程

意义】解决并发编程问题
举个栗子吧!更加深入理解一下多进程和多线程编程~
比如想加工一大批零件,有两种做法:
一是再建一个工厂重新再搭一套机器(多进程)
在这里插入图片描述此时这两套机器可以同时生产,不过这种方式需要再建立一个工厂,建工厂比较麻烦,成本较高,但这两个工厂之间是相互独立的,相互不影响~
二是还在当前工厂,引进机器再弄一套生产线(多线程)
在这里插入图片描述
这两套机器也可以各自独立生产,是两个独立的执行流,共用同一个资源工厂,除工厂共用,存储原料/成品/仓库/物流运输等等,都能共用,成本降低~
这两种方式均提高了工厂的生产效率,进程相当于工厂,线程相当于流水线~
多进程工厂方式,需多建工厂,开销大,且两机器之间看不到对方进度
多线程工厂方式,有两个机器,共用一个工厂,可以互相了解对方进度
此时想要生产更多的零件,在工厂内弄更多的机器,以此提高生产效率,但是并不是越多越好,如下图:
在这里插入图片描述
1)一个工厂的大小提供的空间是固定的即CPU核心数是固定的,此时想进一步提高机器的数量,工厂已经没有空余位置了,机器只能在工厂外干着急~这时,程序的效率并没进一步提升,可能不仅没提升,可能还会下降,因为调度本身也是有开销的,调度上一个机器,需要把之前的机器移出来,再把这个机器移进去,有开销,总并发程度依旧固定
2)机器是有脾气的,在这个调度来调度去的过程中,可能很生气很累,出现异常,如果一个线程出现异常,可能会带走整个进程!
在我们的电脑中:
1)在同一程序中,内部需要并发完成多组任务,此时使用多线程比较合适(比如微信,可以同时的视频,也可以聊天,网络传输等等)
2)多个程序之间,此时是多进程,进程之间具有"隔离性"(比如微信是一个进程,qq是一个进程等等)
所以多进程和多线程在电脑中是同时存在的~不是多线程代替了全部!且多进程和多线程都是可以并发和并行的

3.3 线程与进程联系与区别

联系
进程包含线程,一个进程可以有多个线程
区别

(1) 进程有自己独立的内存空间和文件描述符表,同一进程多个线程之间共享同一份地址空间和文件描述符表
(2) 进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位
(3) 进程具有独立性,一个进程不会影响另一个进程,但在同一进程的多个线程之间,一个线程挂了,可能会把整个线程带走,影响其它线程~
(4) 进程开销大,消耗资源多,线程执行开销小,但不利于资源的管理和保护

💛💛💛本期内容回顾💛💛💛
在这里插入图片描述
✨✨✨本期内容到此结束啦~下期再见!

相关文章:

【多线程】进程与线程

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 操作系统2. 进程2.1 进程是什么2.2 进程管理2.3 进程调度2.3 内存管理2.4 进程间通信 3. 线程3.1 线程是什…...

【文献阅读】一种多波束阵列重构导航抗干扰算法

引言 针对导航信号在近地表的信号十分微弱、抗干扰能力差的问题,文章提出了自适应波束形成技术。 自适应波束形成技术可以分为调零抗干扰算法和多波束抗干扰算法。 调零抗干扰算法主要应用功率倒置技术,充分利用导航信号功率低于环境噪声功率的特点&…...

前端传递bool型后端用int收不到

文章目录 背景模拟错误点解决方法 背景 我前几天遇到一个低级错误,就是我前端发一个请求,把参数送到后端,但是我参数里面无意间传的布尔型(刚开始一直没注意到,因为当时参数有十几个),但是我后…...

巴伦在接收链路中的应用

一、巴伦的定义 "巴伦"(Balun),是一种平衡-不平衡转换器,通常用于将平衡信号(如差分信号)转换为不平衡信号(如单端信号),或者反之。巴伦在无线通信、广播、天…...

React常见面试题(2024最新版)

创建项目 npx create-react-app my-app启动项目 npm start目录结构 目录/文件名描述README.md项目的自述文件node_modules/项目依赖包存放目录package.json包管理配置文件,记录项目信息和依赖package-lock.json锁定依赖版本,确保跨环境一致性public/公共资源目录public/ind…...

【万方数据库爬虫简单开发(自用)】

万方数据库爬虫简单开发(自用)(一) 使用Python爬虫实现万方数据库论文的搜索并获取信息1.获取url2.输入关键词3.使用BeautifulSoup解析4.获取文章标题信息 使用Python爬虫实现万方数据库论文的搜索并获取信息 后续会逐步探索更新…...

新渠道+1!TDengine Cloud 入驻 Azure Marketplace

近日,TDengine Cloud 正式入驻微软云 Marketplace,为全球更多用户带来全托管的时序数据处理服务。这一举措也丰富了 TDengine 的订阅渠道,为用户提供了极大的便捷性。现在,您可以通过微软云 Marketplace 轻松订阅并部署 TDengine …...

自动化压测工具开发(MFC)

1. 背景 为了减轻测试人员在进行MFC程序压力测试时的重复手动操作,本文档描述了开发一个自动化压力测试工具的过程。该工具能够根据程序界面某块区域的预定状态变化,自动执行鼠标点击或键盘输入操作。 2. 技术概览 串口控制:用于控制外部设备,如继电器。MFC CRectTracker…...

【嵌入式DIY实例】-Nokia 5110显示DHT11/DHT22传感器数据

Nokia 5110显示DHT11/DHT22传感器数据 文章目录 Nokia 5110显示DHT11/DHT22传感器数据1、硬件准备2、代码实现2.1 显示DHT11数据2.2 显示DHT22数据本文介绍如何将 ESP8266 NodeMCU 开发板 (ESP-12E) 与 DHT11 数字湿度和温度传感器以及诺基亚 5110 LCD 连接。 NodeMCU 从 DHT11…...

C# —— 字符串拼接

字符串拼接的方式一 之前的算术运算符 只是用来数值类型的相加 主要做的是数学的运算 // 而string 不存在算数运算 但是可以通过加号 进行拼接 string str "123" 字符串拼接 str str "456"; Console.WriteLine(str); // "123456&q…...

css3新增的伪类有哪些

CSS3 引入了许多新的伪类选择器&#xff0c;这些选择器为开发者提供了更多的样式控制选项。以下是一些 CSS3 中新增的主要伪类选择器&#xff1a; 结构性伪类&#xff1a; :root&#xff1a;选择文档的根元素&#xff08;通常是 <html>&#xff09;。:empty&#xff1a;…...

低代码开发:企业供应链数字化的挑战与应对

随着全球数字化浪潮的不断推进&#xff0c;企业供应链管理也面临着日益复杂的挑战。在这样的背景下&#xff0c;低代码开发技术的出现为企业提供了一种更高效、更灵活的数字化解决方案。本文将探讨低代码开发在企业供应链数字化中的应用&#xff0c;以及它所带来的挑战与应对策…...

线程池的创建与使用

目录 一、线程池1.1 线程池概念1.2 线程池原理1.3 创建线程池的方式1.4 不同特点的线程池1.5 ThreadPoolExecutor[重要]本文的思维导图 最后 一、线程池 1.1 线程池概念 如果有非常多的任务需要非常多的线程来完成,每个线程的工作时间不长,就需要创建很多线程,工作完又立即销毁…...

C++ 中的负无穷大赋值

1&#xff0c;代码先行 示例&#xff1a; #include<iostream> #include<limits>using namespace std;int main() {float inf_pos numeric_limits<float>::infinity();float inf_neg -1*inf_pos;cout << "inf_pos " << inf_pos &l…...

python实现九九乘法表

while循环实现&#xff1a; i 1while i < 9: # 控制行的循环j 1while j < i: # 控制每行的输出print(f"{j}*{i}{j * i}\t", end"")j 1print()i 1for循环实现&#xff1a; for i in range(1, 10):for j in range(1, i 1):print(f"{j}*…...

【已解决】chrome视频无法自动播放的问题

问题&#xff1a; 在用datav开发大屏的时候&#xff0c;放了一个视频组件&#xff0c;但是发现视频组件即使设置了自动播放&#xff0c;仍然无法自动播放 原因&#xff1a; 76 以上版本的谷歌浏览器只能在系统静音下自动播放 解决&#xff1a; 音频自动播放浏览器白名单设置&…...

为什么要分析电商用户数据?详解两大用户数据分析维度

零售电商行业的蓬勃发展带来了海量的客户数据&#xff0c;这些数据不仅记录了消费者的每一次点击、浏览、购买行为&#xff0c;还蕴含着巨大的商业价值。如何从这些数据中提炼出有价值的信息&#xff0c;成为电商企业提升竞争力、优化客户体验、实现可持续发展的关键。本文将深…...

Linux系统的FTP文件传输服务

一.FTP简介 Linux环境下高性能的FTP命令行工具&#xff0c;能够利用FTP协议进行高效的文件传输管理。借助此强大工具&#xff0c;用户能轻松连接远程服务器&#xff0c;执行上传、下载、删除及重命名等操作&#xff0c;显著提高两台设备间的文件交互效率。 1.FTP什么 ftp是一…...

redis 08 慢查询日志

1.什么是慢查询日志 2.慢查询和两个参数有关 2.1 2.2 3.例子&#xff1a; 4 参数详细介绍&#xff1a;...

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十一)- 微服务(11)

12.7 DSL查询语法 查询的基本语法 GET /indexName/_search{"query": {"查询类型": {"查询条件": "条件值"}}} 查询所有 GET /hotel/_search{"query": {"match_all": {}}} 12.7.1 全文检索查询 全文检索查询,会…...

DevExpress WPF中文教程:Grid - 如何向项目添加GridControl并绑定到数据

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...

nodejs湖北省智慧乡村旅游平台-计算机毕业设计源码00232

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;旅游行业当然也不能排除在外。智慧乡村旅游平台是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采…...

架构设计 - 根据性能压力测试结果优化服务器性能

概述&#xff1a;web软件项目工程实施过程&#xff0c;经常会用到客户端和服务端建立 KeepAlive 长连接来提高应用效率的场景。例如&#xff1a;移动端应用或者复杂的网页交互需要在用户浏览时频繁地向服务端发送请求。但是随之而来的问题是&#xff0c;需要对服务器端 tomcat …...

【必会面试题】事务的四大特性?ACID

目录 事务的四大特性&#xff0c;即ACID特性&#xff0c;是数据库管理的基石。 原子性&#xff08;Atomicity&#xff09; 定义&#xff1a;事务作为一个整体被执行&#xff0c;其内部的操作要么全部完成&#xff0c;要么全部不完成。如果事务中的任何一部分失败&#xff0c;那…...

【QT】记录一次QT程序发布exe过程

记录一次QT程序发布exe过程 使用windeploy与enigma发布独立的QT程序第一步 QT编译输出 **release** 版本第二步 QT 自带 windepoyqt 补全链接库第三步 enigma virtual box压缩打包为单一exe最后【2024-06-07 17】- 【补充】 贴一个自己用的bat脚本【**QtDeploy2exe.bat**】半自…...

数据分类分级,误把起点当终点

数据分类分级 吉祥学安全知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 01 — 数据分类分级的定义 数据分…...

stm32 启动文件分析

启动文件前面的介绍 启动文件是后缀为.s的汇编语言文本文件&#xff0c;每行前面的分号表示此行是注释行。 启动文件主要完成如下工作&#xff0c;即程序执行过程&#xff1a; - 设置堆栈指针SP __initial_sp。 - 设置PC指针 Reset_Handler。 - 设置中断向…...

playwright--简单使用

playwright的基本使用主要围绕着启动浏览器、导航至网页、操作页面元素、执行脚本和收集数据这几个核心步骤。以下是简单的使用流程&#xff0c;以同步API为例&#xff1a; 目录 1. 导入库并启动playwright 2. 创建新页面并导航 3. 操作页面元素 4. 异步操作与等待 5. 数…...

pom学习笔记:kimi的自动化操作

1.先看结构&#xff1a; 声明&#xff1a;我是初学&#xff0c;可能有不合理的地方。 2.Base层。 我是把原来一个kimi的自动问答的代码改过来。 分析&#xff1a;其实我是新手&#xff0c;因为我用的浏览器是固定的&#xff0c;也没有打算和别人用。所以浏览器层面年的全部写…...

【iOS】UI学习——界面切换

界面切换 push和poppresent和dismiss示例程序 push和pop 在 Objective-C 中,pop 和 push 通常是与 UINavigationController 一起使用的方法,用于控制导航栈中视图控制器的跳转和回退。 push 和 pop 通常成对使用,用于实现导航栈的前进和后退功能。当用户进入新的视图控制器时…...

做棋盘游戏辅助的网站/网络营销的含义的理解

2019独角兽企业重金招聘Python工程师标准>>> 需求&#xff1a; 1.可以通过数据库配置cronExpression表达式&#xff0c;动态修改执行时间 2.不修改服务器环境支持集群架构&#xff1a;即保证集群环境下单实例运行 3.实现业务上的实时开启/停止控制功能 第一步&#…...

苏州做网站推广的/网上销售

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

网站里面内外链接如何做/2022知名品牌营销案例100例

实验十四 课程学习总结 项目内容这个作业属于哪个课程(https://www.cnblogs.com/nwnu-daizh/)这个作业的要求在哪里(https://www.cnblogs.com/nwnu-daizh/p/11093584.html)课程学习目标掌握软件项目评审会流程&#xff1b;反思总结课程学习内容。1.结合本学期课程学习内容&…...

网站建设公司行业/产品软文怎么写

regex是不可能的&#xff0c;obviously。你看过pyparsing了吗&#xff1f; [编辑] OTOH这可能有用&#xff1a; from functools import wraps def transition(method): wraps(method) def trans(state, *args, **kwargs): command method(state, *args, **kwargs) state.__cla…...

网站备案查询工具/淘大象排名查询

报错代码&#xff1a; 1 dataIndex range(m) 2 del (dataIndex[randIndex]) 报错信息&#xff1a; 错误原因&#xff1a; python3 range返回的是range对象&#xff0c;不是数组对象 解决办法&#xff1a; dataIndex range(m) 改成 dataIndex list(range(m)) 转载于:https…...

网站产品后台界面怎么做/seo专员的工作内容

1题目描述2题目要求3额外的信息 1、题目描述 问题C&#xff1a;“合作和导航” 由于道路的数量&#xff0c;美国许多地区的交通容量有限。例如&#xff0c;在大西雅图地区&#xff0c;司机在交通高峰时段遇到长时间的延误&#xff0c;因为交通流量超过了道路网络的设计容量。…...