面试题整理 - 进程与线程问题

1.进程线程区别:

1.从本质上区分:

进程是操作系统资源分配的基本单位

线程是任务调度和执行的基本单位

2.在开销方面:

每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销

线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小

3.稳定性方面:

进程中某个线程如果崩溃了,可能会导致整个进程都崩溃。而进程中的子进程崩溃,并不会影响其他进程。

4.内存分配方面:

系统在运行的时候会为每个进程分配不同的内存空间

而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源

5.包含关系:

没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的

线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程

2.进程,线程,PUB,内核结构 之间的微妙关系

进程和线程都是PCB结构体(轻量级进程)描述的

3.CPU与线程之间的关系

并发是指一个处理器同时处理多个任务。
并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。

1.一个线程执行需要占用一个CPU资源

2.多个CPU执行多个线程可以分配不同的线程给多个CPU执行,这样就是并行的角度;多个线程可以轮换的使用一个CPU进行执行,这样就是并发

3.并发就考虑到线程之间的分配机制,请看Linux内核设计与实现

4.线程切换的理论

CPU切换线程

PCB结构体中存储了很多信息,而这些信息就是用于恢复线程在CPU中执行的位置,其中包括PC指针和寄存器的值

1.PC指针指向下一条执行函数的命令

2.寄存器信息保存为当前线程运行的所有数据

3.以及PUC结构体的其他信息保证线程基本设置与之前一致

6.线程与子进程的详细区别

1.从系统角度而言,Linux中的线程与子进程的描述都是通过PCB结构体(也就是轻量级进程)表示的,只不过对于二者之间的信息有所不同,二者的不同体现在实现上

2.那么从实现角度上看

3.子线程的优势:

子线程切换更方便,因为多数资源是与进程共享的,本质也就提高了运行效率

并行执行,高效发挥多核CPU的优势提高了运行效率

适用于大量计算的场景,多用于计算密集型程序

4.多线程的劣势

多线程不会因为线程的加多无限提高效率,效率呈现正态分布.因为线程过多后会出现线程切换频繁影响效率的问题

多线程的健壮性不高

临界资源会出现二义性的问题,需要加锁保护

线程加锁可能会出现线程饥饿的问题,还需要考虑线程同步的问题,满足线程互斥的情况下需要一个处理临界资源更合理的方法

5.线程的独有和共享

7.各种锁解决同步问题

锁的种类

读锁 : 只可对数据进行查看而不能修改的锁,期间可以加读锁后进行访问数据,可同时多线程访问.期间不能加写锁

写锁 : 期间不能加任何锁,释放后才能访问,可对数据进行修改

互斥锁 : 标记的临界资源只能在此期间被一个线程访问

悲观锁 : 每次修改数据都认为别人回来抢资源,所以在操作之前先上锁

乐观锁 : 每次修改数据都认为别人不会抢资源,所以在操作之前不上锁,但是在更新前会判断一下这个数据是否被修改过 (例如版本号) - 读多写少

自旋锁:当一个线程尝试去获取某一把锁的时候,如果这个锁此时已经被别人获取(占用),那么此线程就无法获取到这把锁,该线程将会等待,间隔一段时间后会再次尝试获取。

死锁现象

互斥条件:
临界资源是独占资源,进程应互斥且排他的使用这些资源。

占有和等待条件:
进程在请求资源得不到满足而等待时,不释放已占有资源。

不剥夺条件:
又称不可抢占,已获资源只能由进程自愿释放,不允许被其他进程剥夺。

循环等待条件:
又称环路条件,存在循环等待链,其中,每个进程都在等待链中等待下一个进程所持有的资源,造成这组进程处于永远等待状态。

提高互斥锁使用效率

互斥锁和条件变量要一起使用

1.互斥锁:主要是用在多线程编程时,多个线程同时访问同一个变量的情况下,保证在某一个时刻只能有一个线程访问。

2.条件变量:作用是用于多线程之间的线程同步。线程同步是指线程间需要按照预定的先后顺序进行的行为,比如我想要线程1完成了某个步骤之后,才允许线程2开始工作,这个时候就可以使用条件变量来达到目的。

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

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

相关文章

爬虫案例(读书网)(下)

上篇链接: CSDN-读书网https://mp.csdn.net/mp_blog/creation/editor/139306808 可以看见基本的全部信息:如(author、bookname、link.....) 写下代码如下: import requests from bs4 import BeautifulSoup from lxml import etreeheaders{…

设计模式:真正的建造者模式

又臭又长的set方法 经常进行Java项目开发使用各类starter的你一定见过这种代码: public class SwaggerConfig {Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any…

解决VMware虚拟机在桥接模式下无法上网的问题

解决VMware虚拟机在桥接模式下无法上网的问题 windows11系统自动启动了热点功能,开启热点可能会干扰虚拟机的桥接设置。 方法一:windows11可以提供网络热点服务 方法二:手动指定桥接的物理网卡 方法一:关闭热点功能 优点&#xff…

少儿编程启蒙宝典:Scratch动画游戏108变

一、编程教育的时代价值与意义 随着数字时代的深入发展,社会对人才的需求正发生深刻变革,计算思维与编程能力已成为衡量个人竞争力的重要指标。在此背景下,培养孩子们运用计算思维解决实际问题的能力,成为教育领域的重要任务。编…

运动用什么骨传导耳机好?推荐这五款运动骨传导耳机!

在运动生涯,我见证了自我挑战与超越的每一个瞬间,而这一切都离不开那如影随形的运动骨传导耳机。一款出色的运动耳机,其重要性不言而喻——它不仅是提升运动效率的得力助手,更是开启多元化运动体验的金钥匙。近年来,运…

网络结构-组件-AI(九)

深度学习网络组件 RNN公式讲解计算示意图讲解 CNN计算示意 Normalization(归一化层)Normalization常见两种方式 Dropout层 RNN 循环神经网络(recurrent neural network) 主要思想: 即将整个序列划分成多个时间步,将每一个时间步的…

创建通用JS公共模块并发布至npm

title: 创建通用JS公共模块并发布至npm tags: UMD rollup verdaccio npm categories: 模块化 概要内容 创建:JS公共模块 打包:使用rollup 打包公共模块 发布:js公共模块至verdaccio平台 发布:js公共模块至npm平台 如何创建JS公共模…

媒体邀约宣传做了13年,我们总结了哪些经验?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 「51媒体」作为一家在媒体邀约宣传领域深耕13年的专业机构,积累了一些经验。现在与大家分享下: 合理的制定媒体邀约传播方案 在进行媒体邀约前,首先需…

木舟0基础学习Java的第二十天(线程,实现,匿名有名,休眠,守护,加入,设计,计时器,通信)

多线程 并发执行的技术 并发和并行 并发:同一时间 有多个指令 在单个CPU上 交替执行 并行:同一时间 有多个指令 在多个CPU上 执行 进程和线程 进程:独立运行 任何进程 都可以同其他进程一起 并发执行 线程:是进程中的单个顺…

【人工智能】深度剖析AI伦理:强化隐私防线,推动算法公平性的核心议题

文章目录 🍊1 人工智能兴起背后的伦理及道德风险1.1 算法偏见与歧视1.2 数据隐私侵权1.3 透明度受限1.4 决策失衡1.5 AI生成内容的危险性 🍊2 建构AIGC伦理观:实现人机共创的永续提升2.1 技术手段与伦理预防2.2 即时警告与紧急关停措施2.3 法…

图片如何去水印,PS 图片去水印的几种常见方法

在数字图像的世界里,水印常常被用来标识版权或防止未经授权的使用,但有时它们却成为了美观的障碍。无论是出于个人偏好还是专业需求,去除图片上的水印已经成为一项常见的任务。 Adobe Photoshop 作为行业标准的图像编辑软件,提供…

队列(Queue),循环队列,双端队列(Deque)and LeetCode刷题

队列(Queue),循环队列,双端队列(Deque)and LeetCode刷题 1. 队列的概念2.队列的使用3. 队列的模拟实现3.1 用链式结构实现队列3.2 用顺序结构实现队列 4. 循环队列5. 双端队列(Deque&#xff09…

【内网安全】横向移动-Wmi-Smb-CME密码喷射

目录 环境介绍域信息收集-横向移动前置判断是不是在域内获取域控主机的内网ip端口扫描内网获取主机密码 域横向移动-WMI-自带&命令&套件&插件1.wmic系统自带:(单执行:即无回显) 2.cscript系统自带:(交互式) 3.wmiexec-impacket&a…

文献阅读:A Case for Managed and Model-less Inference Serving

目录 知识点记录推理服务在线推理特点 动机:为什么作者想要解决这个问题?贡献:作者在这篇论文中完成了什么工作(创新点)?规划:他们如何完成工作?1.挑战1.1 选择一个模型变体1.2 异构硬件1.3 资源提供1.4 启…

MySQL双主双从实现方式

双主双从(MM-SS) 前言 避免单一主服务器宕机,集群写入能力缺失 从 1 复制 主1 ,从 2 复制 主 2 主 1 复制 主 2,主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从, 是为了以下情景&#xff0c…

初识XXE漏洞及ctfshow做题(373-378)

初识XXE漏洞 1.XXE简介 XXE就是XML外部实体注入,当允许引用外部实体时, XML数据在传输中有可能会被不法分子被修改,如果服务器执行被恶意插入的代码,就可以实现攻击的目的攻击者可以通过构造恶意内容,就可能导致任意…

昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例

今天是29天,学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理(NLP)库。它具有以下特点: 支持多种 NLP 任务:如语言模型、机器翻译、问答、情感分析、序列标记、摘要等&#xff…

SPINDILOMETER:用于多导睡眠图的睡眠纺锤波模型

摘要 通过对近年来睡眠脑电(EEG)信号分析方法的研究,本文提出了一种可集成到多导睡眠图(PSG)设备中的SPINDILOMETER模型,以供PSG电生理信号研究人员、临床睡眠医生和技术人员使用。为此,通过分析PSG中的脑电信号,开发了一个测量睡…

算法题目整合

文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b,她仅可以执行一次以下翻转操作:选择a数组中的一个区间[i, j]&…

【Neural signal processing and analysis zero to hero】- 2

Nonstationarities and effects of the FT course from youtube: 传送地址 why we need extinguish stationary and non-stationary signal, because most of neural signal is non-stationary. Welch’s method for smooth spectral decomposition Full FFT method y…