有关Linux线程的问题,有几个需要澄清的:

F28335 DSP ePWM模块实战:从基础配置到电机控制 本文详细解析了TI TMS320F28335 DSP的ePWM模块,从基础概念、寄存器配置到实战应用。通过代码示例,手把手教你如何配置定时中断、生成PWM波形、实现死区保护与故障联防,并最终完成一个可调速、可换向的直流电机控制项目,是掌握F28335电机控制核心技术的实战指南。 阅读详情
有关Linux线程的问题,有几个需要澄清的:
1.核心级线程与用户级线程
2.核内还是核外
3.linux的标准线程库是哪个?他们之间有什么区别?
4.lwp与线程的关系
5.LinuxThreads的缺点,NPTL作了哪些改善?
6.如何确定你的gcc支持NPTL
7.最后弱弱地问一句,linuxThread是核心级线程吗
以下是我的看法,不全
一.核心级线程与用户级线程
从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/进程)上下文切换开销。
针对线程模型的两大意义,分别开发出了核心级线程和用户级线程两种线程模型,分类的标准主要是线程的调度者在核内还是在核外。前者更利于并发使用多处理器的资源,而后者则更多考虑的是上下文切换开销。
二.核内还是核外
在线程机制的具体实现上,可以在操作系统内核上实现线程,也可以在核外实现。
核内实现的线程自然是核心级线程;
核外实现的线程可能是核心级线程,也可能是用户级;
例如:
在核外实现的线程可以分为"一对一"、"多对一"两种模型,前者用一个核心进程(也许是轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完成(所以,它是一个核心级线程),而后者则完全在核外实现多线程,调度也在用户态完成(它是用户级线程)。
三.linux的标准线程库是哪个?他们之间有什么区别?
LinuxThreads、NGPT、NPTL
其中,LinuxThreads是2.5之前linux采用的标准thread库,NGPT为M:N模型,而NPTL是2.5以后的标准thread库,集成在glibc中。
四.lwp与线程的关系
在线程概念出现以前,为了减小进程切换的开销,操作系统设计者逐渐修正进程的概念,逐渐允许将进程所占有的资源从其主体剥离出来,允许某些进程共享一部分资源,例如文件、信号,数据内存,甚至代码,这就发展出轻量进程的概念。
Linux内核在 2.0.x版本就已经实现了轻量进程,应用程序可以通过一个统一的clone()系统调用接口,用不同的参数指定创建轻量进程还是普通进程。
针对LinuxThreads、NPTL:
它所实现的就是基于核心轻量级进程的"一对一"线程模型,一个线程实体对应一个核心轻量级进程,线程的调度等同于lwp的调度(核内调度,所以是核心级线程),而线程之间的管理在核外函数库中实现。
五.LinuxThreads的缺点,NPTL作了哪些改善?
LinuxThread的缺点:
1.进程id问题
按照POSIX定义,同一进程的所有线程应该共享一个进程id和父进程id,但是目前"一对一"模型,导致每个线程都有自己的进程id
2.信号处理问题
由于异步信号是内核以进程为单位分发的,而LinuxThreads的每个线程对内核来说都是一个进程,且没有实现"线程组",因此,某些语义不符合POSIX标准,比如没有实现向进程中所有线程发送信号
3.线程总数问题
4.管理线程问题
管理线程容易成为瓶颈,这是这种结构的通病;同时,管理线程又负责用户线程的清理工作,因此,尽管管理线程已经屏蔽了大部分的信号,但一旦管理线程死亡,用户线程就不得不手工清理了,而且用户线程并不知道管理线程的状态,之后的线程创建等请求将无人处理。
5.同步问题
LinuxThreads中的线程同步很大程度上是建立在信号基础上的,这种通过内核复杂的信号处理机制的同步方式,效率一直是个问题
NPTL:
1.进程id
引入thread group的概念,
Process ID-对每一个进程或者线程,都有一个独一无二的pid,
Thread Group ID-对于进程,TGID=PID; 对于线程,TGID=Parent PID;
TID-对每一个线程,都有一个独一无二的线程ID;
getpid-返回的是TGID;
通过这样一个方法,满足了进程id的要求
2.信号处理问题
见【附】
六.如何确定你的gcc支持NPTL
getconf GNU_LIBPTHREAD_VERSION命令来查看gcc的编译时的对多线程的支持方式
如果返回的是linuxthreads-0.10,说明你的gcc不支持NPTL
如果返回的是nptl-0.60这样的信息,说明你的gcc能用来编译新的NPTL
  
七.最后弱弱地问一句,linuxThread是核心级线程吗
当然是,不过它是在核外实现的,详见四
   
【附】
POSIX Signals and Multithreaded Applications
The POSIX 1003.1 standard has some stringent requirements for signal handling of multithreaded applications:
Signal handlers must be shared among all threads of a multithreaded application; however, each thread must have its own mask of pending and blocked signals.
信号处理函数在所有线程间共享,但每个线程自己可以设定信号掩码
The kill( ) and sigqueue( ) POSIX library functions  must send signals to whole multithreaded applications, not to a specific thread. The same holds for all signals (such as SIGCHLD, SIGINT, or SIGQUIT) generated by the kernel.
kill和sigqueue函数传递的应该是TGID(线程组id),接收者是该线程组中所有线程
Each signal sent to a multithreaded application will be delivered to just one thread, which is arbitrarily chosen by the kernel among the threads that are not blocking that signal.
送达线程组的信号应该只会被某一个线程接收,该线程由kernl从该线程组中未block该信号的所有线程中选定(arbitrarily),记住,只有一个,所以,在一个线程组中,只能有一个定时器。
If a fatal signal is sent to a multithreaded application, the kernel will kill all threads of the applicationnot just the thread to which the signal has been delivered.
致命错误发送给线程组。
MATLAB GUI 水果成熟度分级系统设计与实现 本文基于 MATLAB GUI 设计并实现了一款水果成熟度分级系统,能够准确地评估水果的成熟程度。在实现过程中,我们运用了 MATLAB 中的函数实现对图像的处理和分析,同时使用 GUI 界面增加了系统的易用性。值得一提的是,在实际操作中,我们应该结合实际需求对系统进行相应的改进与完善,以满足不同领域和应用场景下的需求。实验结果表明,本系统可以有效地检测出水果的成熟度,并对其进行精准的评分。因此,本文设计并实现了一款基于 MATLAB GUI 的水果成熟度分级系统。三、MATLAB 代码实现。 阅读详情

相关推荐

密码学小白必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学初学者提供了系统获取和阅读三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文的实战指南。详细介绍了通过IACR官方渠道、ePrint预印本等权威资源免费下载论文的方法,并分享了高效筛选、精读核心章节及构建个人知识体系的具体策略,帮助读者快速切入密码学研究前沿。

weixin_28363123的博客 402

Linux多线程

线程:在进程内部进行,是CPU调度的基本单位!

wangsir的博客 1494

OpenMontage:AI代理驱动的端到端视频生产系统实战指南

在当今内容创作领域,自动化视频生成技术正成为提升生产效率的关键。其核心原理在于通过智能体(Agent)架构,将复杂的视频制作流程拆解为可被AI理解和执行的标准化任务,从而实现从创意到成片的端到端自动化。这项技术的核心价值在于大幅降低了专业视频制作的门槛,使非专业用户也能快速产出具有一定专业度的内容。其典型应用场景包括社交媒体短片、产品演示、知识科普视频的批量生产。OpenMontage正是这一技术理念的杰出实践,它构建了一个完整的代理驱动视频生产系统,将AI编码助手转变为能自主规划并执行脚本撰写、素材检索、

weixin_35757191的博客 648

【Linux】从零开始认识多线程 --- 线程概念与底层实现

本文讲解了线程的基本概念,谈到了线程与进程关系,理解其本质区别

叫我龙翔的博客 1852

计算机视觉(相机标定;内参;外参;畸变系数)

目录 一、预备知识 1、坐标系变换过程(相机成像过程) (1)相机坐标系转换为图像坐标系(透视投影变换遵循的是针孔成像原理) (2)齐次坐标的引入原因:(为什么引入齐次坐标???) 2、内参与外参矩阵的构成 3、畸变参数 二、相机标定 1、张正友标定法(光学标定)及其求解思路 2、求解内参矩阵与外参矩阵的思路: (1)计算内参与外参矩阵的乘积M (2)求解内参矩阵A (3)求解外参矩阵(R1 R2 T) 三、参数优化 1、L-M算法 2、相机标定步骤 四、相关代码及其实验结.

QYJ_WORKHARDING的博客 6万+

《数据结构》知识点汇总+算法代码总结【全】

写在前面:本文写于吴签时期,在家备考时刷完数据结构王道书之后想着把书中重点梳理汇总一下。本文内容包括但不局限于王道数据结构每章的知识点及其课后习题所涵盖的知识点。本人曾在大三期间打过一些程序设计类比赛,所以本文所涉及到的代码不一定局限于王道书,但思想都一样。 期末复习和备考408均可使用第一章:绪论(不在考研大纲但很重要)第二章:线性表第三章:栈和队列第四章:串第五章:树与二叉树第六章:图第七章:查找 第一章:绪论(不在考研大纲但很重要) 数据结构三要素:逻辑结构、存储结构、数据的运算;其中逻辑结构包括线

qq_44622401的博客 17万+

linux+kill+进程和线程,在LINUX系统中 关于进程和线程终止的问题

#include#includepthread_tthread;void*fun(void*arg){printf("hell0n");pthread_exit((void*1));}intmain(void){pthread_create(&thread,NULL,fun,NULL);sleep(1);return127;}在UNIX环境高级编程中说进程的最后一个线程在启...

weixin_33837884的博客 358

AWS RDS 介绍 三)创建 RDS 实例

AWS RDS 介绍 共分为 7 个部分, 其中 第 3部分重点介绍,如何创建一个RDS 实例。 三) AWS RDS 试用MySQL http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.

XuYongshi02的专栏 7646

Linux:进程 vs 线程:资源共享与独占全解析(线程四)

进程与线程的核心区别在于 “资源分配” 和 “调度执行” 的职责划分线程共享进程的大部分资源,仅独占执行上下文相关资源,这是其轻量级的本质理解资源共享与独占特性,是后续学习线程同步、通信的基础下一篇将讲解线程控制的核心操作:线程创建与终止,不见不散啦!!

hello world/linux 677

【雕爷学编程】MicroPython手册之 Teensy 4.1 实时时钟 (RTC)

在类的初始化函数中,定义了用于控制I2C总线的i2c对象和RTC模块的I2C地址。接着,使用该引脚初始化了一个Pin对象。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。

雕爷学编程 575

手把手入门YOLO到改进优化教程 | 【P1基础篇】YOLOv8网络架构原理

本节先来学习基础知识,以YOLOv8进行讲解入门, 拿YOLOv8入手掌握YOLO的底层逻辑 ,也可以基于此来轻松学习后面更新的YOLO系列 (大部分YOLO版本的核心思想一致,更新是基于旧版本做结构升级、优化策略,学习成本会越来越低)。

嵌入式阿齐Archie 2万+

Linux线程同步与互斥

信号量是操作系统中用于协调多个执行流(进程 / 线程)对共享资源访问的同步机制,本质是一个 “计数器 + 等待队列”,通过控制计数器的增减来实现 “资源占用” 与 “释放” 的管理,避免并发场景下的资源竞争问题。线程池是一种线程管理机制,它预先创建一定数量的线程,将任务提交到线程池的任务队列中,由线程池中的线程轮流执行这些任务,避免了频繁创建和销毁线程的开销,提高了系统性能和资源利用率。死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态。

2401_89044302的博客 898

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

985小水博的摸鱼日常 3091

Linux_多线程

但是如果主线程不是最后一个退出的线程呢?场景一:主线程退出,但进程未退出(其他线程仍运行)如果主线程只是 “退出执行”(比如调用。

hy____123的博客 1122

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

linux内核进程和线程,(转)Linux内核本身和进程的区别 内核线程、用户进程、用户线程...

转自:http://blog.youkuaiyun.com/adudurant/article/details/23135661这个概念是很多人都混淆的了,我也是,刚开始无法理解OS时,把Linux内核也当做一个进程。其实内核本身不是以进程形式存在的,最多在初始化的过程中表现得就像一个进程,但是内核绝对没有进程的数据结构task_struct,可以严格跟进程区分开 。自从创建init 进程之后,内核就不再主动...

weixin_31546795的博客 587

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Linux——线程互斥

该文章摘要了多线程编程中的关键概念,包括共享资源、临界资源、临界区、互斥、原子性等。重点阐述了多线程不加锁保护共享资源会导致的数据不一致问题,并通过抢票程序实例演示了线程竞争导致票数变为负数的过程。文章详细解释了原子操作与互斥锁的区别,介绍了Linux中的互斥锁机制及其相关API函数(初始化、销毁、加锁等),并区分了全局锁和局部锁的使用场景。最后强调了保护共享资源的本质是对临界区代码进行保护,通过加锁确保任何时候最多只有一个线程能执行临界区代码。

二哈的博客 841

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Linux操作系统之线程:线程控制

上一篇文章我们着重对线程他的共享代码这个特点进行了论述,讲解了部分性质与容易出现的问题。那么现在我们本篇文章就更加深层次的来学习一下线程吧!兄弟们,线程这玩意儿就是个共享怪胎,表面上说栈是独立的,但实际上我用个全局指针就能偷看其他线程的栈数据!创建线程底层就是个clone系统调用,各大语言都是套了层皮而已。线程退出的姿势也可多:主线程return直接带崩全场,副线程return就跟函数返回一样乖巧。

m0_74824865的博客 143

线程互斥【Linux操作系统】

因为它会变成3条汇编指令,一条汇编指令虽然是原子的,但是3条汇编指令和在一起的操作就不是原子的了所以在CPU在执行这3条汇编指令期间,都有可能进行线程切换。比如:ticketnum=1了,线程a把1读取到寄存器之后,线程a就切换了,还没去–ticketnum线程b也来读取了,也把ticketnum=1读到寄存器里了这个时候,线程a和线程b就都会判断,ticketnum>0,就都进去抢了而且。

2301_80058734的博客 1209

linux系统下创建线程,C语言多线程(1)在Linux下创建和取消线程

多线程程序是使用C在Linux下开发的. Linux系统下的多线程遵循POSIX线程接口,称为pthread.#includeint pthread_create(pthread_t *限制tidp,const pthread_attr_t *限制属性,void *(* start_rtn)(void),无效*限制arg);返回: 如果可以,返回0,失败时显示错误编号通过限制修改的指针是在C99...

weixin_36330888的博客 724

linux c 杀子线程,简单了解C语言中主线程退出对子线程的影响

这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后会由init进程来回收该子进程。那如果是把进程换成线程的话,会怎么样呢?假设主线程在子线程结束前就已经退出...

weixin_30845365的博客 670

linux 线程优先级的高低和执行顺序的关系,混乱的Linux内核实时线程优先级

原标题:混乱的Linux内核实时线程优先级背景Linux会把进程分为普通进程和实时进程,普通进程采用CFS之类调度算法,而实时进程则是采用SCHED_FIFO或SCHED_RR。无论优先级高低,实时进程都会优先于SCHED_NORMAL中的所有进程先执行,因为后者里面都是普通的非实时进程。具体可以参看Linux阅码场早期文章:宋宝华:关于Linux进程优先级数字混乱的彻底澄清内核线程的优先级Lin...

weixin_30371285的博客 453

混乱的Linux内核实时线程优先级

背景Linux会把进程分为普通进程和实时进程,普通进程采用CFS之类调度算法,而实时进程则是采用SCHED_FIFO或SCHED_RR。无论优先级高低,实时进程都会优先于SCHED_NO...

宋宝华 1942

Linux线程详解(一):从 PID、TID 和地址空间真正理解线程本质

本文通过实验验证了Linux线程的核心特性:同一进程内的线程共享PID和全局变量地址,但拥有不同的TID和独立的线程栈。实验显示,主线程和工作线程调用getpid()结果相同,gettid()结果不同;全局变量地址一致,局部变量地址不同。线程本质是共享进程地址空间但独占执行上下文(如程序计数器、寄存器、线程栈)的调度实体。Linux内核将线程视为轻量级任务(task),通过clone系统调用共享资源。线程模型的关键在于理解“共享地址空间,独占执行流”,这为后续线程控制(如同步、退出)奠定了

2503_92532131的博客 385

【Linux系统编程】线程概念与控制

本文介绍了Linux系统中的线程概念与分页式存储管理机制。线程是进程内部的执行流,共享进程资源但拥有独立控制序列。Linux通过轻量化PCB实现高效线程管理。在内存管理方面,系统采用分页机制解决内存碎片问题,将虚拟地址空间划分为页,物理内存划分为页框,通过页表建立映射关系。文章详细讲解了页表结构、物理内存管理机制(struct page)以及多级页表的设计原理,分析了32位系统下4KB页大小的内存管理实现方式,包括虚拟地址转换、页表项计算等核心概念,展现了Linux系统高效管理物理内存的技术方案。

2402_89035880的博客 401

Linux -- 进程和线程

当运行一个程序的时候,系统就会创建一个进程,并为它分配资源(包括内存空间,磁盘空间,I/O设备等),然后把该进程放入进程的就绪队列。 进程调度程序选中它,为它分配CPU及其他有关资源,该进程才真正运行。 线程是进程中执行运算的最小单位,又是执行处理机调度的基本单位。 进程看作操作系统的任务,线程就是子任务。

dongyanxia1000的专栏 399

linux|多线程(一)

介绍了为什么要有线程,和线程控制

学习笔记 1087
上一篇: Linux signal 那些事儿(4)信号的deliver顺序
下一篇: 在Linux下产生并调试core文件
raidtest
博客等级 码龄25年 164粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值