• 六、线程池的编写与解析 —— TinyWebServer


    六、线程池的编写与解析 —— TinyWebServer

    在这里插入图片描述

    一、前言

    经过上次数据库连接池的书写,大家也应该明白池的编写。
    这里说一下不同点,和一些要注意的点。

    1. 为什么使用模板?
    2. 为什么不用单例模式了?
    3. 这里的线程池扮演的角色是什么?
    4. 作用

    二、问题解答

    Ⅰ、 为什么使用模板?

    举例来说,你可以编写一个通用的线程池模板,其任务队列和线程管理逻辑是通用的,然后根据具体的任务类型,实例化不同的线程池对象。这种灵活性和通用性可以在多种应用场景中派上用场,而不需要为每种场景都编写不同的线程池实现。

    Ⅱ、为什么不用单例模式了?

    通常情况下,线程池被设计为可实例化的类,允许根据具体的应用需求创建多个不同配置的线程池实例,提供更大的灵活性和可配置性,同时避免了潜在的并发问题。不过,也可以在某些特殊情况下考虑将线程池设计为单例,但需要谨慎处理并发问题和配置限制。

    Ⅲ、这里的线程池扮演的角色是什么?

    这么来说把,epoll检测到信号来,就把他交给线程池创建线程,又由于我们登录还要用到数据库,所以申请线程池的时候还要使用数据库池。

    Ⅳ、作用

    提升性能
    为什么可以提升性能,请看上期数据库连接池。

    三、代码编写与解析

    1. 使用模板参数

    2. 成员变量:

      • 线程池参数
        • 线程池中的线程数
        • 请求队列中允许的最大请求数
        • 描述线程池的数组,其大小为m_thread_number
        • 请求队列
      • 信号量和互斥锁
        • 保护请求队列的互斥锁
        • 是否有任务需要处理
      • 数据库
      • proactor vs reactor
        • 模型切换
    3. 成员函数:

      • 构造函数、析构函数
      • 添加线程
      • 工作
      • 运行

    四、下期预告

    定时器的编写

    五、最后

    求赞!

  • 相关阅读:
    Jenkins执行策略(图文讲解)
    web 面试高频考点 —— HTML & CSS 篇
    中国石油大学《计算机应用基础#》第三阶段在线作业
    HBuilderX 自定义语法提示
    贪吃蛇游戏
    网络安全——SQL注入之安全狗bypass深度剖析
    WPF中 INotifyPropertyChanged
    算法-- 爬楼梯(Kotlin)
    想要防止视频被盗?用它给视频加水印
    IB心理学生物分析模块
  • 原文地址:https://blog.csdn.net/Ten_years_star/article/details/132888496