总结linux下的线程

本文详细阐述了线程与进程的概念及其区别与联系,重点介绍了线程的特点与优势,并探讨了Linux环境下线程的实现机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是线程?

看一张简略的示意图

这里写图片描述

线程概念:
之前我们学习了进程,说进程是系统资源分配的基本单位,也是调度的基本单位,但是在发展中,出现了线程的概念,linux在POSIX标准中引入了线程库(用户线程库)。需要牢记的重点是线程是比进程粒度更细的执行流 liunx下没有真正的线程。
1.线程是系统调度的基本单位,而进程是系统资源分配的基本单位。
2.上图的意思是:线程是进程的一个执行分支,在进程的内部运行:在进程的地址空间里面运行,进程中的每个线程共享进程状态和资源。实际上每个线程看到的都是部分的代码和数据,每个线程都做好自己的事情。
3.单线程:每个进程中只有一个线程在执行的传统方法(只有单个执行流)(实际上我们之间写的都算是单进程单线程胡或者多进程单线程);
多线程:操作系统在单个进程内支持多个并发执行路径的能力。
4.在linux下,没有给线程另外设计数据结构,实际上都是复用进程的PCB来模拟线程(然后给线程一些私有的东西),也就是说linux下的线程是用进程模拟的,创建和销毁相比于进程要容易,所以把线程叫做轻量级进程,而拿已有的去模拟实现没有的,是一种很好的设计。

线程和进程的区别和联系:
1.同一个进程和多个线程共享同一个地址空间,数据段代码段都是共享的,定义一个函数每一个线程都能访问,定义一个全局变量,各线程都能访问到。
2.线程中哪些东西是公有的:进程中的线程共享进程中的文件描述符、信号处理方式、当前的工作目录、各种id。
哪些是私有的:线程自己的id、线程执行状态、上下文(包括各种寄存器的值、程序计数器和栈指针)、私有栈、errno变量、信号屏蔽字、调度优先级。
问题:为什么线程需要有私有自己的上下文信息:因为线程和进程一样需要调度,需要运转起来。为什么需要有私有栈:为了保证线程与线程之间在运行的时候数据是互相独立的。
3.线程是调度基本单位,进程是资源分配基本单位。
4.上面实际上说过:linux下线程是进程模拟的,复用进程的PCB。
5.线程也有自己的运行状态:阻塞,就绪,运行。(那么一个线程的运行状态的改变是否会影响同一个进程中的其他线程的运行状态的改变,這个问题我们之后讨论)

有关线程的注意点:
1.由于线程共享进程数据,当一个线程更改内存中的某些数据的时候,其他线程都能看到修改后的结果,如果一个线程以读取的方式打开一个文件,那么其他的线程也能够从文件中读取数据。
2.前面说道线程的状态:阻塞就绪运行,一个线程的状态改变会不会影响它所在的进程的状态,会不会影响它所在的进程其他线程的状态?目前我了解两点:一个线程的阻塞不会影响其他线程和所在进程,一个线程的退出也不会对其他人造成影响,一个线程终止,进程退出,所有线程终止,一个线程被挂起没有意义(操作系统精髓与设计原理里面这么说,但是在linux内部线程也是可以被挂起放入等待队列里面的),要挂起就挂起进程,所有线程都会被挂起(因为要腾一个进程的内存)
3.对于多线程处理多任务:只有在两个任务的处理过程互不依赖的情况下,两个任务才可以交叉执行。

运用线程有什么优势:
1.一个进程在某一个时刻只能做一件事情(一个执行流),有了多线程控制之后,我们可以把程序设计成在某个时刻同时执行多个独立的任务。
2.线程的创建和销毁成本比进程要低很多。
3.多线程能共享同一份数据和文件描述符,在不需要内核介入的情况下实现数据的联系,但是进程之间实现数据的交互却需要通过复杂的机制(例如进程间通信),需要内核的介入,
4.简化程序设计,改善响应时间。(一个线程的阻塞并不会影响其他正在执行的线程)
5.同一进程内线程间的切换比进程间的切换所花费的时间要少很多。

暂时就总结这么多,后面还会继续更新对于进程和线程的总结
内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值