线程--轻量化进程

JavaEE之多线程(进程和线程)详解 本文着重讲解了进程和线程的区别和联系。内附图文分析,看完就会! 阅读详情

1、什么是线程

  1. 在⼀个程序⾥的⼀个执⾏路线就叫做线程(thread)。更准确的定义是:线程是“⼀个进程内部的控制序列
  2. ⼀切进程⾄少都有⼀个执⾏线程
  3. 线程在进程内部运⾏,本质是在进程地址空间内运⾏
  4. 在Linux系统中,在CPU眼中,看到的PCB都要⽐传统的进程更加轻量化
  5. 透过进程虚拟地址空间,可以看到进程的⼤部分资源,将进程资源合理分配给每个执⾏流,就形成了线程执行流

2、线程的优点

1、因为叫轻量化进程,自然也就比创建一个进程所消耗的更少。并且在线程之间切换和进程切换之间更快

2、进程切换要换多换CR3和TLB(快表)和    cache(代码和数据的缓存区。--概率,局部性原理,cache本质是缓存->预加载)

3、线程占用资源更少

4、计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现

5、I/O密集型应用,为了提高性能,将I/0操作重参。线程可以同时等待不同的I/0操作

3、线程缺点

  •  性能损失
  • ⼀个很少被外部事件阻塞的计算密集型线程往往⽆法与其它线程共享同⼀个处理器。如果计
  • 算密集型线程的数量⽐可⽤的处理器多,那么可能会有较⼤的性能损失,这⾥的性能损失指的是增加了额外的同步和调度开销,⽽可⽤的资源不变。
  •  健壮性降低
  • 编写多线程需要更全⾯更深⼊的考虑,在⼀个多线程程序⾥,因时间分配上的细微偏差或者因共享了不该共享的变量⽽造成不良影响的可能性是很⼤的,换句话说线程之间是缺乏保护的。
  • 缺乏访问控制
  • 进程是访问控制的基本粒度,在⼀个线程中调⽤某些OS函数会对整个进程造成影响。
  • 编程难度提⾼

4、线程异常


• 单个线程如果出现除零,野指针问题导致线程崩溃,进程也会随着崩溃
• 线程是进程的执⾏分⽀,线程出异常,就类似进程出异常,进⽽触发信号机制,终⽌进程,进程
终⽌,该进程内的所有线程也就随即退出
 

5、线程⽤途


• 合理的使用多线程,能提⾼CPU密集型程序的执⾏效率
• 合理的使⽤多线程,能提⾼IO密集型程序的⽤⼾体验(如⽣活中我们⼀边写代码⼀边下载开发⼯
具,就是多线程运⾏的⼀种表现)
 

6、Linux进程VS线程

 进程是资源分配的基本单位
 线程是调度的基本单位

线程共享进程数据,但也拥有⾃⼰的⼀部分数据:

  •  线程ID
  •  ⼀组寄存器
  •  栈
  •  errno
  •  信号屏蔽字
  •  调度优先级

进程的多个线程,很多书都说线程有独立栈,但是其实其它线程想访问也是能做到的,所以线程大多数都是共享的

  •  ⽂件描述符表
  •  每种信号的处理⽅式(SIG_IGN、SIG_DFL或者⾃定义的信号处理函数)
  •  当前⼯作⽬录
  •  ⽤⼾id和组id

7、操作

轻量级进程的系统调用:vfork  最终的使用是系统调用clone(不用,太复杂)

库函数-用户级线程:pthread_create (线程id,线程属性,函数指针,喂给线程函数的参数)  返回值成功为0,失败为错误码;

c++11 : thread 本质是封装了pthread

所以编译都要包含pthread第三方库

新线程和main线程谁先运行不确定

线程创建出来,时间片也要瓜分,比如一个进程10hs,创建了5个线程,瓜分10hs,每个2毫秒

等待

线程创建的时候也是要被等待和回收的

理由:a.类似僵尸进程的问题 b.为了知道新线程的执行结果

等待 pthread_join(指定线程id,返回值二级指针); 阻塞等待

线程之间的大部分都是共享的,栈堆都可以

退出

主线程结束,进程结束,新线程结束,线程结束。

任何地方调用exit表示进程退出。

线程有取消的函数,但是不建议取消,因为不知道线程的状态取消了的返回值是-1

同时如果主线程有任务的话,可以将新线程设为分离状态,就可以不用等待子线程了。

线程取消也必须得join,否则会陷入类似僵尸

线程没有非阻塞等待

软件大多都不退

北斗导航 | ChatGPT之RTK、RTD、ARAIM算法原理及程序代码(ChatGPT看你怎么回答,附部分代码) ChatGPT之RTK、RTD、ARAIM算法原理及程序代码 阅读详情

相关推荐

国产麒麟系统中的PaddleOCR离线绿色部署:高效安全的文字识别新纪元

摘要:本文详细介绍了PaddleOCR在银河麒麟V10SP1系统上的离线部署方案。通过Conda虚拟环境隔离依赖,采用离线包安装方式实现无网络部署,支持80+语言识别。重点讲解了模型量化剪枝优化、多线程处理等性能调优技巧,并提供了完整的OCR识别代码示例。该方案具有数据本地化处理的安全优势,适用于医疗票据数字化等对隐私要求严格的场景,同时解决了模型加载失败、内存不足等常见问题。

墨夶的博客 1228

线程为什么比进程更加轻量化???(cache寄存器)

创建释放创建。

weixin_73964834的博客 262

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 757

【操作系统】线程比进程更轻量化的原因分析

线程的轻量性源于资源共享减少了“复制-切换-回收”的全生命周期成本创建时:无需复制地址空间、文件描述符等重型资源,仅初始化私有数据。切换时:无需切换地址空间和TLB,仅处理少量私有状态。销毁时:仅释放私有资源,共享资源延迟到进程结束时统一回收。这种设计使线程更适合频繁创建销毁、需要高效协作的场景(如并发处理请求),而进程因资源隔离性更适合独立运行的任务(如不同应用程序)。

司六米希的博客 876

从IR Drop到EM分析:数字IC电源规划中那些没人明说的细节(以MTCMOS配置为例)

本文深入探讨数字IC后端设计中电源规划的关键细节,特别关注MTCMOS配置、电源网络电阻最小化和level shifter供电等实战技巧。通过分析IR Drop和EM问题,提供优化floorplan和powerplan的具体策略,帮助工程师避免常见陷阱,提升芯片设计的稳定性和可靠性。

q9w8e7r6t5的博客 511

FoundationPose实战:从零部署到Demo运行全记录

本文详细记录了FoundationPose从零部署到Demo运行的全过程,包括Ubuntu环境配置、项目部署、依赖安装及常见问题解决方案。特别针对复现过程中的关键步骤如CUDA版本选择、Eigen3安装等提供了实用技巧,帮助开发者高效完成FoundationPose的部署与调试。

weixin_27102543的博客 269

进程和线程的区别

1、首先是定义 进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。 线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。 2、一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。 3、线程是一种轻量级...

qq_43128070的博客 207

无人机散热系统设计:从材料选择到智能调控的全面解析

本文全面解析无人机散热系统设计,从材料选择到智能调控,探讨了导热界面材料、轻量化散热结构和智能调控算法的应用。通过实战案例,展示了如何在极端环境下优化散热性能,提升无人机的工作效率和可靠性。

weixin_42567279的博客 430

Linux多线程(二)之进程vs线程

Linux多线程之进程vs线程、重谈地址空间:进程是资源分配的基本单位,承担系统资源分配;线程是调度的基本单位,共享进程数据但拥有独立线程ID、寄存器等部分数据。线程相比进程更轻量化,体现在创建释放更简单(仅需处理PCB)、切换更高效(无需切换页表等)、CPU缓存利用率更高。线程共享进程的地址空间、文件描述符等资源,其时间片源自进程分配,不可独立申请等。

lll_666666的博客 598

大数据领域数据服务的数据分析工具推荐

你有没有过这样的经历?——领导说“帮我分析一下上个月的销量”,你打开Excel却发现数据有100万行,电脑直接卡死;或者想实时知道“现在直播间的观众在买什么”,却不知道用什么工具处理每秒10万条的点击数据。本文的目的:帮你解决“选什么工具做什么事”的问题,覆盖大数据服务的全流程(采集→存储→处理→分析→可视化),推荐高频、实用、易上手的工具,并讲清楚它们的“适用场景”和“优缺点”。范围。

大数据洞察的博客 1931

Docker Desktop 从 C 盘迁移到 D 盘的正确方法

本文介绍了三种将Docker数据目录从C盘迁移到D盘的方案。方案1针对WSL2用户,通过导出/导入虚拟磁盘实现迁移;方案2采用软链接方式,适合所有Docker模式;方案3则建议重装Docker到D盘。其中WSL2迁移方案(方案1)最为稳定可靠,推荐使用。文章详细说明了各方案的操作步骤及注意事项,并提供了迁移后常见问题的解决方法,帮助用户彻底解决Docker占用C盘空间的问题。

sg_knight的专栏 2178

【Linux系统编程】:认识线程

如何理解线程,线程与进程的关系,Linux中线程的具体实现,虚拟地址怎么转换成物理地址(推荐查看文中链接),线程为什么比进程更轻量化

m0_66182473的博客 1068

(14-3)值分布式算法:QR-DQN (Quantile Regression DQN)算法

QR-DQN(Quantile Regression DQN)是一种强化学习算法,它是深度 Q-网络(Deep Q-Network,DQN)的一个变种,旨在更好地处理值函数的不确定性。QR-DQN的实现步骤与传统的DQN类似,但在目标分布计算和损失函数方面有一些不同之处,这使得它能够更好地处理值函数的不确定性。QR-DQN(Quantile Regression DQN)算法的核心思想是将值函数表示为一个分布,而不是传统的单一值估计。在下面的内容中,将讲解一个使用QR-DQN算法的例子。

码农三叔 2053

进程和线程区别

进程和线程的区别:1,进程是资源的分配与调度的独立单元,线程是cpu调度的基本单元2,进程包含多个线程,线程可以同时运行,共享整个进程资源(寄存器,堆栈,上下文)3,线程是轻量级进程4,线程之间共享全局变量,静态变量等数据。通信较为方便,但需要考虑同步和互斥的问题。进程之间需要通过IPC通信。5,进程有自己的PCB,私有属性不共享,进程之间独立性更高,也就更加安全。多线程程序中某一个线程死掉,整个...

qq_38791024的博客 232

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

进程 & 线程之间的区别 & 联系

进程和线程之间的区别和联系

bestme 352

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【线程】线程的概念

计算的是在物理内存的偏移量。用10位比特位说明项目录二级页表表项有1024个,用12位是刚刚好符合物理内存划分为很多个块,每个块是4KB,这样算出的偏移量就不会超过这个大小。其实每个页表里还会有一部分来说明权限其他问题的,我们不说一个进程是不会把进程空间全部用完的,也就是说项目录里的表项没有全部填满,对应的二级页表也就没有1024个,这样页表用的空间就没有那么大int a =10;

奇点的博客 1021

【Linux系统化学习】线程概念

本片文章介绍了Linux中线程的概念!!!

qq_55119554的博客 1548

Linux之线程概念,理解和控制

Linux之线程的概念,理解,和进程的区别,异常,用途以及线程的控制

weixin_74285822的博客 1269

进程 线程 协程

进程 线程 协程 进程 线程 协程,网上资料繁多,有些是个人理解,存在一定误导性。 操作系统 考试经常会考:进程是资源的分配单位,线程是调度单位;进程切换开销大、线程切换开销小等等。网上经常会说协程就是线程等等,在linux 的世界里:线程是轻量级进程,协程是轻量级线程; 听者知道说者为什么这样说,这叫主动,否则为被动,只有主动才能掌控节奏 ,源码会告诉我们一切。 当我们描述一个事物时,信息自然...

qq_39015563的博客 235

【Linux线程篇】探索Linux多线程:并行编程的入门指南

Linux线程作为现代操作系统中不可或缺的并发机制,其在内核层和应用层的深入理解和应用对于开发高性能、高可靠性的软件系统至关重要。本文提供了一个全面的视角,帮助读者从理论到实践,构建对Linux线程的全面认识,并在实际开发中游刃有余地应用线程技术。

why 1565

Linux学习——线程的概念

Linux学习——线程的概念

qq_41934502的博客 483

『 Linux 』线程概念

线程本质上是进程的一个执行分支,用于处理进程中的代码和数据;每个线程都可以执行独立不同的代码片段,这意味着在一个进程中可以同时执行多个任务;同一个进程中的所有线程共享相同的内存地址空间和资源(如全局变量,文件句柄等);使得线程之间的通信和数据共享十分搞笑,因为它们不需要像进程通信那样复杂的机制;在Linux中,线程在进程"内部"执行,线程在进程的地址空间内运行任何执行流要执行的前提是具有资源;进程地址空间是进程的资源窗口,线程在进程"内部"执行意味着其将执行进程代码的一部分;

小侯宝的博客 1023

你真的了解线程吗?

OS中存在多个线程,会对多个线程进行管理(创建,暂停,挂起等等情况) 先描述再组织,TCB(线程控制块),T:thread C:control B:block 线程本质,线程地址空间的认识

m0_74146042的博客 1556

带你搞定多线程(上) —— 线程概念与线程控制

线程概念 理解线程 当操作系统开始运行一个进程的时候,也就意味着操作系统会创建一个pcb对我们的进程进行描述,并且会为该进程创建自己的虚拟地址空间。 如下图: 最右边是我们需要执行的任务,我们可以选择串行处理,就是处理完一个再去处理第二个。但是学习了线程之后我们的进程就可以同时处理下面这三个任务。 Linux下没有其实没有线程的具体说法,Linux下的线程是通过轻量化进程实现的,所谓轻量化进程就是一个进程中可以存在多个pcb,这些pcb共用一个虚拟地址空间 每一个线程都是进程中的一个执行流,因此多个执行流

ifwecande的博客 257

【多线程】进程与线程

操作系统本质上是运行在计算机上的软件程序,对上,它负责给软件运行提供稳定的环境,对下,它要管理好各种硬件设备。一个运行起来的程序就是进程,而我们电脑中的.exe文件就是一个可执行的文件(程序),当双击这个.exe文件,这个程序跑起来就形成了一个进程。关于这个我们可以通过任务管理器查看,如下图:我们从上面两种图都可以观察到我们的计算机上运行着许许多多的进程,我们在最开始提到过,操作系统的一大功能就是进行进程的管理,那么它是如何对进程进行管理的呢?描述一个进程:使用结构体/类把一个进程有哪些信息描述出来。

weixin_62848751的博客 1241

Linux系统:线程介绍与POSIX线程库实现线程控制

本文深入探讨了Linux系统中的线程实现机制,重点分析了线程作为轻量级进程(LWP)的本质特性。文章首先介绍了线程的基本概念和核心特征,即共享进程资源与独立执行逻辑,然后详细阐述了Linux内核中轻量级进程的实现原理,包括资源共享机制和调度方式。文章还解析了POSIX线程库(pthread)的封装机制,解释了线程ID与内核轻量级进程ID的区别,并通过具体代码示例展示了线程创建、管理以及同步等操作。最后,文章从进程地址空间布局的角度分析了线程控制块(TCB)的结构和线程调度机制,揭示了用户级线程与内核级轻量级

yue_2899799318的博客 1008

进程与线程

一个运行起来的程序就是进程,如.exe文件跑起来就在系统中形成了一个进程。

weixin_72779762的博客 570
上一篇: 分页式存储管理--虚拟地址和多级页表
下一篇: 互斥与同步
microlovw
博客等级 码龄3年 283粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值