【Linux线程】线程的认识

目录

线程的概念及一些基本理论

线程异常

线程与进程的关系

线程ID、线程控制块


线程的概念及一些基本理论

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 。
Linux没有真正意义上的线程概念,只有轻量级进程light weight process(内核级)的概念,通过Linux原生线程库(用户级)为我们提供的线程相关函数,就有了线程的概念了。
线程目前分配资源,本质就是分配地址空间范围。
一切进程至少都有一个线程执行流。
线程在进程内部运行,本质是在进程地址空间内运行。
在Linux中,在CPU视角中,看到的线程PCB都要比传统的进程更加轻量化。
透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。

线程异常

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

线程与进程的关系

1、进程是承担资源分配的实体
2、线程是CPU调度的基本单位。
3、线程共享进程数据,但也拥有自己的一部分数据。
注意:每个线程都必须有自己的 独立栈结构(储存线程启动函数中所有的局部变量)、 独立上下文(每个线程都是被CPU独立调度执行的,CPU中的一套寄存器硬件存储的相应线程的上下文数据)

线程ID、线程控制块

Linux 中,目前的线程实现是 Native POSIX Thread Libaray, 简称 NPTL 。在这种实现下,线程又被称为轻量级进程 (Light Weighted Process), 每一个用户态的线程,在内核中都对应一个调度实体,也拥有自己的进程 task_struct 结构体

Linux中的原生线程库提供了关于线程的函数,因此该库要先被加载到内存里形成相应的进程的页表映射关系,映射到进程地址空间里的共享区中。通过调用原生线程库里的pthread_create函数创建新线程时,原生线程库里会创建一个描述线程的线程控制块TCB,该结构体包括线程的ID、线程的独立栈结构、线程局部存储等,接下来通过系统调用clone(pthead_create封装了一个创建轻量级进程的系统调用clone),在内核创建一个轻量级进程。

在Linux中,pthread_t pid即线程的ID其实就是原生线程库里的各个描述线程的struct ptread的地址(本质就是进程地址空间上的一个地址)。

  • 19
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值