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

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

在这里插入图片描述

一、前言

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

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

二、问题解答

Ⅰ、 为什么使用模板?

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

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

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

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

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

Ⅳ、作用

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

三、代码编写与解析

  1. 使用模板参数

  2. 成员变量:

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

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

四、下期预告

定时器的编写

五、最后

求赞!

猜你喜欢

转载自blog.csdn.net/Ten_years_star/article/details/132888496
今日推荐