轻量级进程(LWP)和线程

2024-09-01 00:12
文章标签 线程 进程 轻量级 lwp

本文主要是介绍轻量级进程(LWP)和线程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

线程是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,也就是一个共享内存地址。
在这里插入图片描述

这篇关于轻量级进程(LWP)和线程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125391

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.