• Linux.14_多线程(重点总结)


    Linux.14_多线程

    进程VS线程

    在这里插入图片描述
    进程线程关系如下:在这里插入图片描述
    线程共享进程数据,也拥有自己的一部分数据:
    线程ID、一组寄存器、栈、

    一、线程简介

    概念

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

    1.线程优缺点

    优点:

    1. 线程启动速度快、量级轻(创建、切换)
    2. 线程系统开销小、占用资源小

    缺点:

    1. 性能损失:线程的数量大于可用处理器时,会产生较大的性能损失,性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。
    2. 健壮性降低:线程之间缺乏保护,eg:一个线程的变量容易影响另一个线程。
    3. 缺乏访问控制
    4. 编程难度提高

    2.线程异常

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

    3.线程用途

    • 合理的使用多线程,能提高CPU密集型程序的执行效率和IO密集型程序的用户体验。
      生活中一边洗澡一边下载游戏,就是多线程运行的一种表现。

    二、线程控制

    POSIX线程库

    • 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的
    • 头文件
    • 链接操作需要使用:“-lothread” 选项

    进程ID和线程ID

    • 在Linux中,目前的线程实现是Native POSIX Thread Libaray,简称NPTL。在这种实现下,线程又被称为轻量 级进程(Light Weighted Process),每一个用户态的线程,在内核中都对应一个调度实体,也拥有自己的进程描述符(task_struct结构体)。
    • 没有线程之前,一个进程对应内核里的一个进程描述符,对应一个进程ID。但是引入线程概念之后,情况 发生了变化,一个用户进程下管辖N个用户态线程,每个线程作为一个独立的调度实体在内核态都有自己的 进程描述符,进程和内核的描述符一下子就变成了1:N关系,POSIX标准又要求进程内的所有线程调用getpid函数时返回相同的进程ID,Linux内核引入了线程组的概念解决上述问题。
    • 多线程的进程,又被称为线程组,线程组内的每一个线程在内核之中都存在一个进程描述符(task_struct) 与之对应。进程描述符结构体中的pid,表面上看对应的是进程ID,其实不然,它对应的是线程ID;进程描述符中的tgid,含义是Thread Group ID,该值对应的是用户层面的进程ID
  • 相关阅读:
    Leetcode808. 分汤
    ps制作花朵形状
    Android 组件化 组件上下依赖关系实现
    leetcode每天5题-Day41(二叉树7-二叉搜索树)
    用Java包com.sun.net.httpserver下面的类实现一个简单的http服务器demo
    1.6 分组延时,丢失和吞吐量
    对象存储解决方案:高性能分布式对象存储系统MinIO
    基于SSM的会议室预约系统
    python+vue精品课程在线学习系统
    【STL】:反向迭代器
  • 原文地址:https://blog.csdn.net/kris_paul/article/details/117772894