进程和多线程

news2024/11/18 21:35:40

目录

进程

1. 如何管理进程

2. 进程调度

3. 内存管理

4. 进程间通信

多线程

线程和进程的关系:

线程安全问题


进程

一个正在运行的程序,就是一个 进程,进程是一个重要的 "软件资源",是由操作系统内核负责管理的。每个进程都对应一些资源,在上图中每个进程都占用了内存,CPU,磁盘等,也可以认为进程是操作系统资源分配的基本单位。

1. 如何管理进程

我们通过组织+描述的方法来管理进程

描述: 使用结构体来描述进程属性,我们把这样的结构体叫做PCB(进程控制块)

组织: 通过双向链表来把多个PCB给连接在一起。

创建一个进程:本质上是创建一个PCB结构体,把它插入到链表中。

销毁一个进程:把链表上的PCB节点删除掉。

任务管理器查看进程列表: 本质上是遍历PCB链表。

2. 进程调度

 1. pid 进程的身份标识(唯一的数字),每个进程都对应一个身份标识。

2. 内存指针  指向了自己的内存有那些,进程占用了那些资源。

3. 文件描述符表 硬盘上的文件等其他资源。

在资源分配中,进程有很多个,而我们的处理器又很少,在这种情况下,我们希望每个进程能够“同时运行”,就引入了并行和并发两个概念。

●并行:微观上同一时刻,两个核心上的进程,就是同时执行的

●并发: 微观上,同一时刻,一个核心上只能运行一个进程,但是它能够快速的切换(比如电灯闪烁的频率高了人就感觉电灯是常亮的)宏观上人们感知不到,我们感觉几个进程是在同时运行的。

并行和并发都是由内核负责处理的,应用程序感知不到,因此我们把并行和并发统称为并发。

操作系统中有一个重要的模块调度器,就让有限的CPU来调度执行多个进程

4.进程调度的相关属性

(1)  进程的状态

●就绪状态: 进程随时准备去CPU上执行

●运行状态: 正在运行的进程

●阻塞状态: 短时间无法到CPU上执行

(2) 优先级

进程也是有优先级的,操作系统在进行调度的时候,有的进程CPU就分配的多,有的分配的少,有的先分,有的后分,这就叫进程的优先级

(3) 上下文

操作系统在进行进程切换的时候,就需要把进程执行的"中间状态"记录下来,保存好,等下次这个进程在cpu上运行的时候,就可以回复上次的状态.,接着往下执行, 相当于 "存档,读档"。

(4) 记账信息

操作系统统计每个进程在CPU上占用的时间和执行的指令数目,根据这个来决定下个阶段如何调度。

3. 内存管理

早期的操作系统,程序运行时分配的内存,就是物理地址

针对进程使用的内存空间,进行隔离,引入了虚拟地址空间,代码里不在直接使用真实的物理地址,而是使用虚拟的地址,由操作系统和专门的硬件设备负责进行虚拟地址到物理地址的转换。

虚拟地址空间主要就是为了避免进程之间的相互影响。


4. 进程间通信

在上面虽然进行了进程间的隔离,但有些时候,进程之间需要进行数据的交互,我们采用进程间通信来实现进程间的交互。我们需要一个多个进程都能访问到的“公共空间”,基于这个公共空间来进行数据的交互。

多线程

在如今,CPU已经进入到多核心时代,要想进一步提高程序的运行速度,就要充分利用CPU的多核心资源,其实,多进程已经可以解决并发编程的问题,已经可以利用CPU的多核资源了,但多进程也有一些弊端,进程太重了(多进程消耗的资源多,并且速度慢)。比如创建一个进程开销较大,销毁一个进程开销太大,调度一个进程,开销较大。因此线程应运而生,线程也叫轻量级编程,在解决并发编程的问题下,让创建,调度,销毁的速度更快。线程把申请资源,释放资源的操作给省下了。

线程和进程的关系:

1. 进程包含线程,一个进程可以包含一个线程,也可以包含多个线程(不能没有),只有在第一个线程启动的时候,开销较大,需要申请资源,后续线程就省事了

2. 同一个进程里的多个线程,共用了进程的同一份资源(主要是内存 和 文件描述符表)。操作系统在调度的时候是以线程为基本单位进行调度的。

3. 如果每个进程有多个线程,每个线程是独立在CPU上调度的,即线程是操作系统调度执行的基本单位。

4.每个线程也有自己的执行逻辑(执行流)。


接下来用吃100只的例子来看看多进程和多线程之间的差别

多进程需要两个房间,两个桌子,两个滑稽老铁~ ~ 这样成本比较高,需要很多额外的资源


多线程让两个滑稽老铁在同一个房间同一个桌子上吃,节省了资源


那我们在思考思考,让滑稽老铁更多,速度能否更快呢?

当滑稽老铁越来越多的时候,桌子的空间是有限度的,后面的滑稽老铁也会吃不上鸡,同理,线程也是一样,增加线程数量的时候,也不是可以一直增加速度,线程太多,核心数量有限,不少的开销反而会浪费在线程调度上了。


线程安全问题

1. 多线程情况下,多个滑稽老铁,滑稽1和滑稽2共享同一份鸡肉,此时可能会打架,但在多进程中则不会出现这中情况,多进程中都是自己执行自己的。

2. 还是上面的问题,当滑稽1把鸡肉给抢走了,导致滑稽2吃不着生气了,滑稽2直接掀桌,那么大家都吃不了了。在多线程中也一样,如果一个线程抛异常,如果处理不好,很可能导致整个进程都异常了

当多个执行流访问到同一个共享资源的时候会出现安全问题

线程模型:天然就是资源共享,多线程争抢同一个资源很容易触发。

进程模型:天然是资源隔离的,不容易触发,进程间通信的时候,多个进程访问到同一个资源,可能会出现问题。

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

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

相关文章

【面试经典150 | 栈】简化路径

文章目录 Tag题目来源题目解读解题思路方法一:字符串数组模拟栈 其他语言python3 写在最后 Tag 【栈】【字符串】 题目来源 71. 简化路径 题目解读 将 Unix 风格的绝对路径转化成更加简洁的规范路径。字符串中会出现 字母、数字、/、_、. 和 .. 这几种字符&#…

c语言之源码反码和补码

c语言源码反码和补码 c语言之源码反码和补码 c语言源码反码和补码一、源码反码补码的介绍二、源码反码补码例子三、源码反码补码练习 一、源码反码补码的介绍 原码、反码、补码是计算机中对数字的二进制表示方法。 原码:将最高位作为符号位(0表示正&…

sipp3.6多方案压测脚本

概述 SIP压测工具sipp,免费,开源,功能足够强大,配置灵活,优点多。 有时候我们需要模拟现网的生产环境来压测,就需要同时有多个sipp脚本运行,并且需要不断的调整呼叫并发。 通过python脚本的子…

一文讲透 “中间层” 思想

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐&…

【打靶】vulhub打靶复现系列3---Chronos

【打靶】vulhub打靶复现系列3---Chronos 一、主机探测 结合之前的方法(arp探测、ping检测),因为我们的靶机和攻击机都在第二层,所以打靶时候我们更依赖arp协议 tips:我在运行期间发现,netdiscover窗口没关…

vue中如何给后端过来的数组中每一个对象加一个新的属性和新的对象(不影响后端的原始数据)

方法: 先看后端的原数据 1、给数组中每一个对象加一个新的属性: 输出查看数组list的值: 2、给数组list加入新的对象: 输出结果: 3、总结: 如果是数组中每个对象新增属性就用map遍历每个对象加入新增的属性…

Baichuan2:Open large-scale language models

1.introduction baichuan2基于2.6万亿个token进行训练。 2.pre-training 2.1 pre-training data 数据处理:关注数据频率和质量。数据频率依赖于聚类和去重,构建了一个支持LSH型特征和稠密embedding特征的大规模去重和聚类系统,单个文档、段…

Java基于ssm+vue开发的失物招领小程序

演示视频: 小程序 https://www.bilibili.com/video/BV1sg4y1d75T/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 管理员 https://www.bilibili.com/video/BV1UH4y167xe/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07a…

论文阅读 - Hidden messages: mapping nations’ media campaigns

论文链接: https://link.springer.com/content/pdf/10.1007/s10588-023-09382-7.pdf 目录 1 Introduction 2 The influence model 2.1 The influence‑model library 3 Data 4 Methodology 4.1 Constructing observations 4.2 Learning the state‑transiti…

编写虚拟UART驱动程序-框架

一、框架回顾 二、编写UART驱动要做的事 1.注册一个uart_driver 2. 对于每一个port,都会在设备树里面有一个节点 3. 设备树里的节点和platform_driver节点匹配 4. 当platform_dirver的probe函数被调用时,可以获得设备树里的信息,从而把每个串…

AutoConfigurationPackages.Registrar.class源码阅读

类作用 {link ImportBeanDefinitionRegistrar}存储来自导入的基本包配置。 registerBeanDefinitions 作用: 根据导入的有Configuration注解的类给定的注释元数据注册bean定义。由于与{codeConfiguration}相关的生命周…

HarmonyOS开发:NodeJs脚本实现组件化动态切换

前言 上篇文章,我们使用NodeJs脚本完成了HarmonyOS项目的组件化运行,但是由于脚本是基于4.0.0.400版本的DevEco Studio开发的,可能在配置文件的修改上有些许差距,那么遇到这种情况怎么办,一种是再写一套针对性的脚本文…

谁能想到,字节2023校招起薪40w+

大家好,我是老原。 转眼2023也来到了年底,每年的校招季,都是大厂上演抢人大战的时机,公布薪资和“开奖”一样刺激。 就拿互联网新贵—字节跳动来说,按照字节15薪计算白菜第一年的总包都超过40W了,对比去年…

【Linux】VM及WindowsServer安装

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯&#x1f3a…

电脑怎么共享屏幕?电脑屏幕共享软件分享!

如何控制某人的电脑屏幕? 有时我们可能需要远程控制某人的计算机屏幕,例如,为我们的客户提供远程支持,远程帮助朋友或家人解决计算机问题,或在家中与同事完成团队合作。那么,电脑怎么共享屏幕&#xff…

皮卡丘RCE靶场通关攻略

皮卡丘RCE靶场通关攻略 文章目录 皮卡丘RCE靶场通关攻略RCE(remote command/code execute)概述远程系统命令执行启动环境漏洞练习第一关exec "ping"第二关 exec "eval" RCE(remote command/code execute)概述 RCE漏洞,可以让攻击者直接向后台服…

java--do-while循环

1.do-while循环 2.do-while循环的特点 先执行后判断 3.三种循环的区别小结 1.for循环和while循环(先判断后执行);do...while(先执行后判断) 2.for循环和while循环的执行流程是一模一样的,功能上无区别,for能做到的while也能做&#xff0c…

0基础学习PyFlink——用户自定义函数之UDAF

大纲 UDAF入参并非表中一行(Row)的集合计算每个人考了几门课计算每门课有几个人考试计算每个人的平均分计算每课的平均分计算每个人的最高分和最低分 入参是表中一行(Row)的集合计算每个人的最高分、最低分以及所属的课程计算每课…

rust学习

rust学习 String类型clone和copy结构体的内存分布for循环&#xff08;<font color red>important&#xff01;&#xff09;堆和栈数据结构vector panic模式匹配忽略模式的值绑定 方法和关联函数线程学习1.多线程的风险2.使用spawn创建线程等待子线程结束move 关键字强制…

主流大语言模型的技术细节

主流大语言模型的技术原理细节从预训练到微调https://mp.weixin.qq.com/s/P1enjLqH-UWNy7uaIviWRA 比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节&#xff1a;tokenizer、位置编码、Layer Normalization、激活函数等。2. 大语言模型的分布式训练技术&#xff1a;数据并行、…