本文给大家带来了关于linux的相关知识,一起聊聊linux中的线程。在linux中,线程(thread)指的是程序内部的一个执行路线,即一个进程内部的控制序列,一切进程至少都有一个执行线程。线程是程序执行的最小单位,线程共享进程数据,但也有自己的一部分数据。
本文适用于linux5.9.8系统、Dell G3电脑。
关于linux中的线程之解析来了
详解线程:在一个程序里的一个执行路线叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”,一切进程至少都有一个执行线程。
进程与线程:进程是资源分配与竞争的基本单位,线程是程序执行的最小单位;线程共享进程数据,但也有自己的一部分数据。
● 线程ID
● 一组寄存器:IP,PSW,堆栈指针
● 栈
● errno
● 信号状态
● 优先级
fork和创建新线程的区别
● 当一个进程执行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它自己的PID。这个新进程的运行时间是独立的,它在执行时几乎完全独立于创建它的进程。
● 在进程里面创建一个新线程的时候,新的执行进程会拥有自己的堆栈(因此也就有自己的局部变量),但要与他的创建者共享全局变量、文件描述符、信号处理器和当前工作目录状态。
线程的优点
● 创建一个新线程的代价要比创建一个新进程小得多
● 与进程之间的切换相比,线程之间的切换需要操作系统做的工作少得多
● 线程占用的资源要比进程少得多
● 能充分利用多处理器的可并行数量
● 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
● 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
● I/O密集型应用,为了提高系统,将I/O操作重叠。线程可以同时等待不同的I/O操作
线程的缺点
● 性能损失
● 一个很少被外部事件阻塞的计算密集型线程往往无法与其他线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。
● 健壮性降低
● 编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良的可能性是很大的,换句话说线程之间是缺乏保护的。
● 缺乏访问控制
● 进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。
● 编程难度提高
● 编写与调试一个多线程比单线程程序困难得多
线程调度竞争范围
● 操作系统提供了各个模型,用来调度应用程序创建的线程。这些模型时间的主要不同是:在竞争系统资源(特别是CPU时间)时,线程调度竞争范围(thread-scheduling contention scope)不一样
● 进程竞争范围(Process contention scope):各个线程在同一个进程竞争“被调度的CPU时间”(但不直接和其他进程中的线程竞争)。
● 系统竞争范围(System contention scope):线程直接和”系统范围“内的其他线程竞争。
以上就是linux中的线程之全部解析,翼速应用平台内有更多相关资讯,欢迎查阅!
我来说两句