• 多线程与线程池


    多线程:https://paul.pub/cpp-concurrency/
    https://zhuanlan.zhihu.com/p/367309864
    https://blog.csdn.net/qq_48930954/article/details/124834084

    1 线程池核心概念

    解决的问题
    需要解决的是多线程编实现并发和并行出现的问题;
    (1)降低资源消耗。多线程不能够线程复用,创建销毁线程开销,线程切换开销等;
    (2)更快的响应任务。创建线程需要时间,响应任务不够及时。
    (3)更可靠的线程管理。线程是稀缺资源,不能无限创建,使用线程池可进行统一的分配和管理。
    基本原理
    相当于实现一个线程与任务管理工具(抽象线程池,线程,任务的模型)。
    预先创建好固定数量的线程(某些线程池模型线程数量可变化),然后在任务请求线程时对线程进行分配和管理,线程池的线程执行完一个任务后再执行另一个任务。

    2 实现

    2.1 任务队列(Task Queue)

    (1) 创建任务队列数据结构,实现添加任务,取出任务方法。
    需要支持多线程,所以需要线程锁。
    任务是一个函数,输入输出需要支持任意类型。
    (2) 添加任务时需要通知线程池内worker开始工作。
    添加任务时,可能部分worker在等待工作,可能所有worker都在工作中,需要使用某种机制触发其工作。

    2.2 线程池(Thread Pool)

    (1)实现多个woker的线程池,没有任务时,woker在等待工作(不占用cpu),有任务时,woker会及时的被触发响应工作。

    以固定线程数量的线程池为例:
    step1:创建一个线程池,包含N个线程。
    step2:每一个线程中的woker被启动,开始运行。
    step3:注册任务时,任务被添加进任务队列,并触发某个等待的woker进行任务响应。如果没有空闲worker,那么直到存在空闲worker后就会进行任务响应。
    step4: 任务响应时,任务被取出任务队列,然后执行完成,worker的一次工作结束。

  • 相关阅读:
    Flutter高仿微信-第26篇-新的朋友
    小米妙想PC端连接平板5教程
    【2023年11月第四版教材】第15章《风险管理》(第三部分)
    pdf转word
    复现文件上传四次绕过
    vue3 props传值默认类型
    编制项目预算的方法和步骤
    位移贴图和法线贴图的区别
    无需下载,粘贴视频链接即可实现人声分离~
    院内导航怎么实现?哪家技术好?医院导航移动导诊服务系统
  • 原文地址:https://blog.csdn.net/u014428224/article/details/127827148