【Linux】了解pthread线程库,清楚并没有线程创建接口,明白Linux并不存在真正意义的线程(附带模型图详解析)

发布于:2024-10-17 ⋅ 阅读:(8) ⋅ 点赞:(0)

前言

大家好吖,欢迎来到 YY 滴Liunx系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

一.Linux不存在真正的线程(没有实体):Linux并没有提供thread_struct结构体(TCB)

  • OS如果真的支持线程,也必须 管理线程 ——先描述(结构体),再组织(数据结构)
  • 比如操作系统提供task_struct结构体(PCB),而并没有提供thread_struct结构体(TCB),进一步佐证我们的结论

结论:

  • 所以说Linux没有真正的实体线程,只是一股进程内部的执行流

二.了解线程pthread原生线程库:不会直接提供线程创建的接口

1.pthread原生线程库不提供线程创建接口

我们回顾点一中得出的结论:

  • 所以说Linux没有真正的实体线程,只是一股进程内部的执行流

来试着看看pthread在这种机制下的表现:

  • C++内部的多线程,本质就是对原生线程库pthread的封装
  • pthread线程库是Linux系统中用于支持多线程编程的标准库,它基于POSIX标准,提供了创建、管理和控制线程的一整套API。
  • Linux没有真正的线程,只有轻量级进程的概念,所以Linux Os 只会提供 轻量级进程 创建的系统调用,不会直接提供线程创建的接口
    在这里插入图片描述

2.从Linux系统模型角度看看我们创建的线程

  • CPU看到的还是PCB,但已经比传统的进程要更轻量化了
    在这里插入图片描述

三.线程与进程相关知识点

1.线程的官方概念&进程的对比

  1. 线程是比进程更加轻量化的一种执行流
  2. 线程是在进程内部执行的一种执行流, 进程是承担系统资源的基本实体
  3. 线程是CPU调度的基本单位

2.线程准确定义&运行本质

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