线程LWP的概念和控制

一、线程的概念

课本:线程是比进程更加轻量化的一种执行流/线程是在进程内部执行的一种执行流

我们:线程是CPU调度的基本单位/进程是承担系统资源的基本实体

地址空间是进程的“资源”窗口,我们通过栈去访问我们的变量,堆去访问用户空间,PCB的创建要从零开始,他要管理文件, 地址空间,加载页表,初始化字段,代码数据,有了进程后,创建线程时,只需要参加资源的分配

​​

现在的进程:

内核有多个执行流的进程

在Linux下我们可以称线程为轻量级进程

线程是比进程更加轻量化的一种执行流?

线程创建更简单

线程切换比进程切换效率更高

1.切换的寄存器少

2.CPU中有硬件cache,会预加载目前访问的附近的代码,称他们为热数据,线程间切换不需要切换cache,切换进程cache立即就失效,所以切换进程就得切换cache。

线程是在进程内部执行的一种执行流?

线程在进程的地址空间中运行

Linux下进程的实现方案

多个PCB指向同一份资源

二、线程的理解

线程的优缺点

优点:创建释放代价小

缺点:缺乏访问控制

健壮性降低 例如除0错误,进程收到信号,由于信号处理方法共享,所有线程也全退出了

线程共享:当前进程的文件描述符表,每种信号的处理方式,当前工作目录,用户id和组id

线程私有:线程id,独立的栈结构,一组寄存器(执行流的上下文)

三、线程控制 *

创建线程

创建的线程去执行了自己的函数。

定义一个全局变量,子线程改变,主线程会改变吗?

会改变,由此可见,与子进程不同,线程是与主线程共享资源的.

CPU是以PID调度还是LWP? LWP

代码 ps -aL 查看线程

他们的PID相同,但是LWP不一样。

时间片也会被线程瓜分,时间片也是资源

编译时需要链接 -lpthread

给线程传参?可以传递对象

产看线程自身id

pthread_self

pthread_self获取自身id,打印当前线程id

将pthreadid打印成16进制ToHex

thread id本质上是一个地址

线程终止

return nullptr 线程终止

exit(13)? 进程终止

pthread_exit(nullptr)

pthread_cancel 终止线程

  • ​pthread_exit​​ 用于正常结束当前线程。
  • ​pthread_cancel​​ 用于请求取消另一个线程。被取消的线程返回-1 PTHREAD_CANCELED

如果线程异常退出了?需要获取吗?

整个进程也出现异常,只需要获得进程的信号。

线程等待问题

阻塞式等待,系统控制主线程最后一个退出

线程默认被等待

线程退出,没有等待,类似于进程的僵尸问题

线程退出时,主线程如何获取新线程的返回值 pthread_join(tid,nullptr) 阻塞式等待

retval为输出型参数

如果主线程不愿意去阻塞等待另一个线程?         分离模式

分离模式(建议主线程最后一个退出)

默认情况下,新创建的线程是joinable的,线程退出后,需要对其进行pthread_join操作,否则无法释放 资源,从而造成系统泄漏。 如果不关心线程的返回值,join是一种负担,这个时候,我们可以告诉系统,当线程退出时,自动释放线 程资源。

pthread_detach(pthread_self())

分离模式下的线程也可以被取消cancel

主线程需要去得到线程的返回值

使用joinable默认等待

用户级线程

上述接口都不是系统直接提供的接口,而是原生现场库pthread的接口

线程的视线是在用户层的,所以Linux称线程为用户级线程

​​

​​​

由于要让用户看到线程的概念,所以在pthread库内对线程进行管理

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

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

相关文章

找不到concrt140.dll怎么修复,这4种方法可轻松搞定

1. concrt140.dll 定义 1.1 系统文件 concrt140.dll 是一个系统文件,属于 Windows 操作系统中重要的动态链接库(DLL)之一。它通常位于系统的 System32 或 SysWOW64 文件夹中,是 Microsoft Visual C 2015 Redistributable 包的一…

Spring Boot电商开发:购物商城系统

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译&#xf…

3D 家庭室内设计软件Live Home 3D Pro for Mac

Live Home 3D Pro for Mac 是一款功能卓越的 3D 家庭室内设计软件,具有多方面的优势和特点: 软件下载地址 丰富的设计功能12: 平面图绘制:用户可以使用直观的点击式绘图工具创建详细的二维平面图。提供房间工具、圆弧和直墙工具…

【CSS】鼠标 、轮廓线 、 滤镜 、 堆叠层级

cursor 鼠标outline 轮廓线filter 滤镜z-index 堆叠层级 cursor 鼠标 值说明值说明crosshair十字准线s-resize向下改变大小pointer \ hand手形e-resize向右改变大小wait表或沙漏w-resize向左改变大小help问号或气球ne-resize向上右改变大小no-drop无法释放nw-resize向上左改变…

记录打鼾软件

记录打鼾软件,在现代快节奏的生活中,足够的睡眠是健康生活的保证。然而,打鼾这一常见的睡眠问题却困扰着许多人,影响他们的睡眠质量,甚至可能引发更严重的健康问题。随着科技的进步,记录打鼾的软件应运而生&#xff0c…

设计模式之门面(Facade)模式

前言 在组建构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至跟本无法实现。采用添加一层(间接)稳定接口,来隔离本来互相紧密关联的接口是一种常见的解决方案 定义 “接口隔离” 模式。为子系统中的一组接口提供一个一…

Spring Boot技术:构建高效网上购物平台

第3章 系统分析 3.1 可行性分析 在系统开发之初要进行系统可行分析,这样做的目的就是使用最小成本解决最大问题,一旦程序开发满足用户需要,带来的好处也是很多的。下面我们将从技术上、操作上、经济上等方面来考虑这个系统到底值不值得开发。…

Linux下永久修改hostname

root登录 vi /etc/sysconfig/networkvi /etc/hostsreboot重启服务器 hostname查询

多线程基础 保姆级讲解

多线程基础 认识线程1)线程是什么2) 为啥要有线程3) 进程和线程的区别 (经典面试题) 多线程线程的创建方式方法1 继承 Thread 类方法2 实现 Runnable 接口方法3 使用匿名内部类创建 Thread 子类对象方法4 匿名内部类创建 Runnable 子类对象方法5 lambda …

塑封芯片多大才需要点胶加固保护?

塑封芯片多大才需要点胶加固保护? 塑封芯片是否需要点胶加固保护,并不完全取决于芯片的大小,而是由多种因素共同决定的。以下是一些影响是否需要点胶加固保护的主要因素: 芯片的应用场景:如果芯片所处的环境较为恶劣&a…

买量内卷严重,小游戏们不得不迈向长期展线

小游戏这两年有多火爆自然不必多说。根据《2024 年 1-6 月中国游戏产业报告》,今年 1-6 月国内移动游戏市场实销收入 1075.17 亿元,同比增长 0.76%,较为平稳;但同时小程序移动游戏(即小游戏)收入达 166.03 …

如何在网站建设中不被外包建站公司忽悠?

让我来公开一些代建站行业忽悠甲方背后的套路吧, 长篇干货警告! 像我们这一行网站建设的外包服务商,忽悠人的情况是普遍的事情! 很多低劣的外包公司,凭着做一单忽悠一单的手段,成为了我们建站行业的害群之…

Python 使用selenium 4.25 进行爬虫(1)

都说python做爬虫比较好,于是我跟着大家的脚步学习python进行爬虫,但是调试了半天,出现各种各样的问题,最终都得到实现了,下面我们来看具体的代码: from selenium import webdriver from selenium.webdriv…

秋招突击——9/13——携程提前准备和实际面经——专程飞过去线下,结果一面挂(难受)

文章目录 引言面经收集面经整理一1. ArrayList和LinkedList2. 线程安全的列表和链表有么?如果没有怎么实现?3. threadlocal4. synchronized锁升级过程及原理5. ReentrantLock原理,以及和synchronized的对比6. 线程池工作原理7. redis常用数据…

Blob数据类型报错时如何获取错误信息

const pdfOrg async (record) > {// 假设 transferExportPdf是结构 result 返回的错误信息let result await transferExportPdf({ batchId: record.batchId });//blob 结构const blob new Blob([result], {type: result.type,});if (blob.type "application/json&q…

【源码+文档+调试讲解】重庆旅游景点数据分析系统python

摘 要 重庆旅游景点数据分析系统是一个专门为旅游管理部门和景点运营商设计的信息化工具,它通过集成和分析各种数据来优化景点管理和提升游客体验。该系统能够实时收集游客流量、景点信息、满意度反馈等关键信息,帮助管理者洞察游客行为和市场趋势。系统…

MySQL 中 FIELD() 自定义排序示例详解,实现按照指定顺序排序

在 MySQL 中,你可以使用 ORDER BY FIELD() 来自定义排序顺序。这个函数允许你指定字段的自定义排序顺序 field() 函数:是将查询的结果集按照指定顺序排序 格式: FIELD(str,str1,str2,str3,…) 什么时候用: 想让某几个特定的字段…

Java_Se 数组与数据的存储

数组是相同类型数据的有序集合。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。 数组的四个基本特点: 1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 2.其元素…

【JavaSE】-- 类和对象(2)

文章目录 6. 封装6.1 封装的概念6.2 访问限定符6.3 封装拓展之包6.3.1 包的概念6.3.2 导入包中的类6.3.3 自定义包 7. static成员7.1 再谈学生类7.2 static修饰成员变量7.3 static修饰成员方法7.4 static成员变量初始化 8. 代码块8.1 代码块概念以及分类8.2 普通代码块8.3 构造…

关于优化活动页面的大尺寸图片的展示问题

背景 在处理一个对清晰度要求较高的页面时,由于可渲染的图片达到了3840 * 10k的分辨率,所以前端这边在接收到活动页面的图片会相当大(2MB起步的),然后就会出现一个图片缓慢从上到下渲染的过程动画,对于C端…