-
由来:线程的频繁创建和销毁需要时间,会大大降低系统的效率。而使用线程池,可以使得线程进行复用,当一个线程执行完任务并不会立即被销毁,而是可以继续执行其他的任务。
-
线程池的组成主要包含三个部分:
- 任务队列:存储需要处理的任务,由工作的线程来处理这些任务。这里包含一个生产者消费者模型,生产者往任务队列添加待处理的任务,消费者从任务队列里取出任务并处理。
-
工作线程:工作线程即任务队列任务的消费者,包含N个。
-
管理者线程:管理者线程只有1个,她不处理任务队列中的任务,而是周期性的对任务队列中的任务数量以及处于忙状态的工作线程个数进行检测。当任务过多的时候,就适当的创建出一些新的工作线程;当任务过少的时候,可以适当的销毁一些工作的线程。
c版本的简易线程池
cpp版本的简易线程池
服务器并发解决方案包含如下:
- 使用多线程实现
- 使用多进程实现
- 使用IO多路转接或者叫做IO多路复用
- 使用IO多路转接+多线程
使用多进程实现的简易服务器
使用多线程实现的简易服务器
- 单线程版本+select的简易服务器
- 多线程版本+select的简易服务器
- 包含一个解决TCP粘包的方案