1.什么是线程池
线程池是一个抽象的概念,若干个线程组合到一起,形成线程池。
2.为什么需要线程池
多线程版服务器一个客户端就需要创建一个线程!若客户端太多,显然不太合适。
3.线程池使用场景
简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时就需要线程池的帮忙了。当然,如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。
4.线程池实现流程
4.1 线程池的线程是要处理请求的,这些请求累计在一起,称之为任务池,线程池包含任务池,是个包含的关系。
4.2 直接上开发流程图

5.实现源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
typedef struct _PoolTask
{
int tasknum;
void *arg;
void (*task_func)(void *arg);
}PoolTask ;
typedef struct _ThreadPool
{
int max_job_num;
int job_num;
PoolTask *tasks;
int job_push;
int job_pop;
int thr_num;
pthread_t *threads;
int shutdown;
pthread_mutex_t pool_lock;
pthread_cond_t empty_task;
pthread_cond_t not_empty_task;
}ThreadPool;
ThreadPool *thrPool = NULL;
int beginnum = 1000;
void *thrRun(void *arg)
{
ThreadPool *pool = (ThreadPool*)arg;
int taskpos = 0;
PoolTask *task = (PoolTask *)malloc(sizeof(PoolTask