轻量级进程(LWP)和线程

news2024/11/15 11:07:15

线程是CPU调度的基本单位
进程是承担系统资源的基本实体(进程是资源分配的基本单位)

线程并不拥有系统资源,而是共享使用进程的资源,进程的资源由系统进行分配

任何一个线程都可以创建或撤销另一个线程

多进程里,子进程可复制父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,但拥有自己的栈空间

进程中的多个线程共享同一地址空间,因此Text Segment、Data Segement 都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到
线程独有的数据
线程ID 一组寄存器(有独立的硬件上下文-动态切换) errno 信号屏蔽字 调度优先级
线程除了地址空间之外,还共享
文件描述符表 每种信号的处理方式(SIG_IGN,SIG_DFL或者自定义的信号处理函数) 当前工作目录 用户id和组id

单个进程如果出现除零,野指针问题导致线程崩溃,程序也会随着崩溃
线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,该进程内的所有线程也就随之退出

程序是静态的,不涉及进程,进程是程序运行时的实体,是一次程序的运行

1.多线程和多进程的区别
①.多线程共享同一进程的资源,而多进程具有独立的地址空间和资源。因此,创建和切换线程比切换进程更加轻量级,减小了开销,因为线程之间共享了进程中的大部分资源,因此共享的数据不需要重新创建或销毁,因此消耗上低于进程,反之也就是速度快于进程
②.通信和同步:在多线程中,由于共享同一地址空间,因此通信更加方便,全局数据以及函数传参都可以实现,而进程间则需要系统调用来完成每个进程都拥有独立的内存空间,需要使用IPC机制来进行进程间通信
③.数据隔离:多线程共享同一进程的数据空间,在访问和修改数据时需要考虑同步和互斥,而多进程具有独立的地址空间,数据隔离较好,一个进程的错误不会直接影响到其他进程
④.可扩展性:由于共享资源和上下文切换等因素限制,多线程在某些情况下无法有效利用多核处理器,并行度受限,而多进程能够充分利用不同核心处理器,并行执行任务
⑤.编码复杂性:相对于单线程或单进程编码,同时使用多线程或者多进程需要考虑并发控制、数据共享与同步等问题,增加了编码的复杂性和调试难度

2.什么是LWP
LWP是轻量级进程,在Linux下进程是资源分配的基本单位,线程是cpu调度的基本单位,而线程使用进程pcb描述实现,并且同一个进程中的所有pcb共用同一个虚拟地址空间,因此相较于传统进程更加的轻量化

3.请简述LWP与pthread_create创建的线程之间的关系
pthread_create是一个库函数,功能是在用户态创建一个用户线程,而这个线程的运行调度是基于一个轻量级进程实现的。
4.简述轻量级进程ID与进程ID之间的区别
因为Linux下的轻量级进程是一个pcb,每个轻量级进程都有一个自己的轻量级进程ID(pcb中的pid),而同一个程序中的轻量级进程组成线程组,拥有一个共同的线程组ID
在这里插入图片描述
Linux下的轻量级进程是一个PCB,每个轻量级进程都有一个自己的轻量级进程ID(PCB中的pid,也就是LWP),而同一个程序中的轻量级进程组成线程组,拥有一个共同的线程组ID
同时每一个线程又有一个tid,这个tid指向用户层的tcb,在加载到共享区的线程库中,每一个线程都有它对应的tcb结构
每个进程中都有一个LWP与线程组ID相等的线程,这个线程被称为主线程,因此当一个进程中只有一个线程时,通过LWP和进程pid来找到调度该线程是等价的的。
pthread_create是一个库函数,功能是在用户态创建一个用户线程,而这个线程的运行调度是基于一个轻量级进程实现的。
对于线程的创建,我们是通过原生线程库给我们提供的应用层接口来实现的,我们要先把原生线程库加载到共享内存当中,然后在这个共享内存中创建线程,而每一个线程都在共享内存中对应一个起始地址,这里的pthread_create的第一个参数就是这里的tid,也就是一个共享内存地址。
在这里插入图片描述

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

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

相关文章

黑神话悟空-提高画质、防卡顿、修复等各种功能、各种CT表、各种存档、武器包、人物、装备替换等193+MOD合集

193MOD合集,提高画质,减少卡顿、修复等功能MOD各种CT表各种存档武器包、物品、人物、装备、造型替换等 具体MOD可在文件内查看 特别说明:3款珍品大圣套装替换初始套装MOD是不同的,(其中全装备珍品大圣套装是不可以跳出…

笔记 12 : 彭老师课本第 6 章, PWM ,代码实践

(85) 驱动写多了,会发现,首先就是硬件的初始化,配置硬件。 (86)查看源代码组织: (87) 编译过程不变: (88) 运行同以前的步…

2024年8月总结及随笔之逝

1. 回头看 日更坚持了609天。 读《零信任网络:在不可信网络中构建安全系统》更新完成读《软件开发安全之道:概率、设计与实施》开更并持续更新 2023年至2024年8月底累计码字1463007字,累计日均码字2402字。 2024年8月码字109278字&#x…

全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型

全网最适合入门的面向对象编程教程:42 Python 常用复合数据类型-collections 容器数据类型 摘要: 在 Python 中,collections 模块提供了一组高效、功能强大的容器数据类型,扩展了内置的基础数据类型(如 list、tuple、…

ubuntu14.04.5出现配环境后重启进不了图形化界面解决记录

前言 这段时间给公司接了一个需要使用到linux环境进行交叉编译的工程,就采用了简单易操作的图形化ubuntu系统。 镜像采用的是:ubuntu14.04.5-desktop-amd64.iso(官网下载的) 配置环境的过程下载了众多依赖包,总之就是缺啥下载啥…

Mac 安装 jdk 8详细教程

Mac 电脑上安装Jdk 8 的步骤很简单,不用想Windows那样需要配置环境变量PATH、JAVA_HOME。 具体方法如下: 首先,去JDK官网下载对应版本的JDK 8。 这里需要注册一个账号,然后,账号下载。 下载完后,得到一个…

【IEEE独立出版 | 往届快至会后2个月检索】2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024,9月27-29)

2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)将于2024年9月27日至29日在中国延吉举行。会议由长春理工大学主办,延边大学、长春理工大学电子信息工程学院、长春理工大学计算机学院、长春理工大学人工智能学院承办,多…

视频智能分析厨帽检测算法,厨帽检测算法全套源码、样本和模型展示

厨帽检测算法是一种基于人工智能和计算机视觉技术的系统,旨在自动检测厨师是否佩戴了符合规范的厨帽。该算法通过分析视频流或图像数据,实时识别厨帽的佩戴情况,从而帮助餐饮企业确保员工的着装符合卫生标准。这一技术广泛应用于餐馆、厨房、…

旋转排序:搜索算法

搜索旋转排序数组的算法设计 引言 在计算机科学的世界中,二分搜索算法被广泛认为是处理已排序数组查找任务的高效工具。 它通过不断将搜索范围缩小一半的方式,快速定位到所需元素的位置,这种方法的时间复杂度仅为O(log n),使得…

开源轻量级进程监控工具monit的使用以及monit进程监控工具常用的监控配置案例示例大全

一、开源轻量级进程监控工具monit的应用 今天在服务器杀进程时,发现有一个进程一直在重启,寻找服务器各种定时任务未发现有定时程序,也没有发现supervisord的进程管理服务,后来才发现服务器上启用了monit这个工具,moni…

初识Redis:JavaSpring客户端

第一步,需要在添加依赖的时候,选中这两个依赖。 第二步,修改配置文件 此处可以用properties也可以用yml。 第三步,完善controller 之前使用jedis,是通过jedis对象里面的各种方法来操作redis的,此处Spring中…

粘包、半包和Netty中的自定义帧解码器间的关系

之前学习Netty的时候学到自定义编解码器这一部分后就没再继续学习,同时对于这部分知识学习不深入。一直有个误区:自定义编码以及解码服务器就能够解决TCP作为流式协议传输(无消息边界)导致的粘包、半包问题。实则上面这句话有非常…

Pr:代理预设

在 Adobe Premiere Pro 中,“创建代理” Create Proxies对话框中的“代理”预设提供了六种格式选项。 ProRes QuickTime 代理 ProRes 是 Apple 开发的高质量中间编解码器,广泛应用于专业视频编辑领域。它提供了出色的色彩保真度和较低的压缩损失&#xf…

SPR系列单点激光雷达测距传感器|模组之CAN-OPEN软件调试说明

SPR系列单点激光雷达测距传感器|模组利用激光束的时间飞行原理来测量距离。它们发射出一个脉冲激光,并测量激光从传感器发射到击中物体并返回的时间来计算距离。 SPR系列单点激光雷达测距传感器|模组在测量精度要求较高的应用中常被使用,应用范围广泛&a…

PWM(Pulse-width modulation)脉冲宽度调制

PWM(Pulse-width modulation)是脉冲宽度调制 脉冲宽度调制是一种模拟信号电平数字编码方法。脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所以根据面积等效法则,可以通过对改变脉冲的时…

《高等代数》“么”字型行列式

说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。 注:1)“么”字型行列式总共有8种形式 2)“么”字型行列式的求解方法有三种:(1)用长斜边消去短斜边 &#xff0…

Open3D mesh 精细化处理-loop剖分

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 参数详解 返回值 2.2完整代码 三、实现效果 3.1原始mesh 3.2剖分后mesh Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长…

Vue 3.5 中的 base watch 函数与 Vue 模块化设计探索

在 Vue.js 的发展历程中,每一个版本的更新都带来了新特性和性能优化,而 Vue 3.5-beta.3 引入的 base watch 函数,虽然名字上听起来像是传统 watch API 的基础版本,但实际上它标志着 Vue 内部架构的一次重要调整。这次调整不仅影响…

Jupyter如何使用Anaconda的虚拟环境

Anaconda的虚拟环境大家应该都知道是什么,我们可以建立多个虚拟环境并在对应的环境中安装不同的python三方库从而运行不同的python项目,那么在jupyter中如何使用Anaconda的虚拟环境呢,今天就为大家分享一个这样的操作教程。 请参考图文进行以…

VSCode设置复制 Ctrl+D想下复制

VSCode 默认向下复制当前行是 shift Alt ↓,但是我们习惯了IDE和webStrom的CtrlD的想下复制.下面是VSCode自定义快捷键. VSCode设置复制 CtrlD想下复制 1.文件->首选项->键盘快捷方式(ctrk 在案ctrs)2.输入 copy line down->右键->更改键绑定3.完成 1.文件->首…