• Linux入门学习16


    线程: LWP: light weight process 轻量级的进程,本质仍是进程 ( Linux 环境下 )
    进程与线程的区别
    进程 : 有独立 PCB ,且有独立地址空间,
    线程 : 有独立 PCB ,但没有独立的地址空间 ( 共享 )
    区别 : 在于是否共享地址空间。
    线程 : 最小的执行单位。
    进程 : 最小分配资源单位(可看成是只有一个线程的进程)
    linux下内核实现线程原理
    1. 轻量级进程 (ight-weight process), 也有 PCB ,创建线程使用的底层函数和进程一样, 都是 clone
    2. 从内核里看进程和线程是一样的, 都有各自不同的 PCB ,但是线程 PCB 中指向内存资源的三级页表是
    相同的。
    3. 进程可以蜕变成线程。
    4. 线程可看做寄存器和栈的集合。
    5. linux 下,线程最是小的执行单位 : 进程是最小的分配资源单位。
    线程共享资源
    1. 文件描述符表
    2. 每种信号的处理方式
    3. 当前工作目录
    4. 用户 ID 和组 ID
    5. 内存地址空间 (.text/.data/.bss/heap/ 共享库 ) 、共享全局变量
    线程非共享资源
    1. 线程 id (线程标识符)
    2. 处理器现场和栈指针 ( 内核栈 )
    3. 独立的栈空间 ( 用户空间栈 )
    4.errno 变量
    5. 信号屏蔽字
    6. 调度优先级
    线程优、缺点
    优点 :
    1. 提高程序并发性
    2. 开销小
    3. 数据通信、共享数据方便。
    缺点 :
    1. 属于库函数,不稳定
    2. 调试、编写困难、 gdb 不支持
    3. 对信号支持不好
    pthread_t 线程标识符
    函数:在使用gcc 生成文件时需要在最后加上——lpthread库函数
    pthread_self()获取线程ID,没有入参,ID为无符号整数(%lu)
    pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start routine) (void *), void *arg);创建新线程
    参数1:传出参数,保存系统为我们分配好的新线程ID。
    参数2:线程属性,通常传NULL,表示使用线程默认属性。若想使用具体属性也可以修改该参数。
    参数3:回调子线程函数名
    参数4:参3子线程函数需要的参数,没的话传NULL
  • 相关阅读:
    FreeMarkerViewResolver类简介说明
    企业聊天应用程序使用 Kubernetes
    【c/c++】c和cpp混合编译
    农场管理小程序|基于微信小程序的农场管理系统设计与实现(源码+数据库+文档)
    【CSS】H7_浮动
    SpringCloud服务配置介绍&Nacos实现管理配置
    思科配置VLAN间单臂路由
    从技术角度看城市停车难问题
    全网最全超详细.htaccess语法讲解
    深入理解Java虚拟机:Jvm性能调优
  • 原文地址:https://blog.csdn.net/Sj740383500/article/details/127556703