C++高性能服务器开发基础系列之【线程池】

目录

 

线程池

what

why

how

线程池的三种socket模型:

整体设计

工作情况分析

实现细节分析

一些常见问题


本文仅代表个人观点,如有疏漏之处望评论区回复指正,感谢!

线程池

what

一种多线程的使用和管理模式,大多用于高并发服务器上,能够合理有效地利用多线程模型高并发服务器上的资源,多用于linux高并发服务器的场景下,与epoll模型结合使用。

why

  1. 服务器角度:解决多线程维护的问题。分为两方面,线程创建数量控制与线程资源的复用。在数量控制方面,线程过多会带来调度的额外开销,在线程池中通过主控线程可以合理维护线程数量;在线程资源的复用方面,避免了处理短时间任务时频繁创建销毁线程的消耗,处理完成任务后回归线程池,通过主控线程管理,充分利用内核资源。
  2. 客户端角度:解决客户端连接服务器的延时问题。每一个客户端连接服务器都会分配一个线程去处理IO任务,如果没有预先创建好的线程和主控线程合理维护,客户端连接时需要等待服务器创建线程产生延时,影响用户体验。采用线程池,服务器可以迅速响应客户端的连接,分配线程处理任务。

how

解读线程池的设计思路以及设计过程中遇到的问题。

整体设计

分为三部分:管理线程(负责线程数的扩容与缩减)、任务队列(负责向任务队列填装任务)、工作线程(负责从任务队列取任务并处理)。

其中任务队列、工作线程采用生产者-消费者模型,用互斥量+条件变量实现线程同步。

工作情况分析

1.线程池刚刚初始化,任务队列中没有任务,线程池中只有默认线程数(假设为3),线程处于空闲等待状态。

2.添加小于默认线程数量的任务,线程池开始工作,此时线程池

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值