线程池开发流程(简易版)

本文介绍了线程池的概念,探讨了为何需要线程池,列举了其应用场景,并详细阐述了线程池的实现流程,同时附带了源码分析,最后提到了使用线程池时应注意的事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值