六、线程池的编写与解析 —— TinyWebServer
一、前言
经过上次数据库连接池的书写,大家也应该明白池的编写。
这里说一下不同点,和一些要注意的点。
- 为什么使用模板?
- 为什么不用单例模式了?
- 这里的线程池扮演的角色是什么?
- 作用
二、问题解答
Ⅰ、 为什么使用模板?
举例来说,你可以编写一个通用的线程池模板,其任务队列和线程管理逻辑是通用的,然后根据具体的任务类型,实例化不同的线程池对象。这种灵活性和通用性可以在多种应用场景中派上用场,而不需要为每种场景都编写不同的线程池实现。
Ⅱ、为什么不用单例模式了?
通常情况下,线程池被设计为可实例化的类,允许根据具体的应用需求创建多个不同配置的线程池实例,提供更大的灵活性和可配置性,同时避免了潜在的并发问题。不过,也可以在某些特殊情况下考虑将线程池设计为单例,但需要谨慎处理并发问题和配置限制。
Ⅲ、这里的线程池扮演的角色是什么?
这么来说把,epoll检测到信号来,就把他交给线程池创建线程,又由于我们登录还要用到数据库,所以申请线程池的时候还要使用数据库池。
Ⅳ、作用
提升性能
为什么可以提升性能,请看上期数据库连接池。
三、代码编写与解析
-
使用模板参数
-
成员变量:
- 线程池参数
- 线程池中的线程数
- 请求队列中允许的最大请求数
- 描述线程池的数组,其大小为m_thread_number
- 请求队列
- 信号量和互斥锁
- 保护请求队列的互斥锁
- 是否有任务需要处理
- 数据库
- proactor vs reactor
- 模型切换
- 线程池参数
-
成员函数:
- 构造函数、析构函数
- 添加线程
- 工作
- 运行
四、下期预告
Http类解析与编写
五、最后
求赞!