企业网站建站 费用,梅州建站找哪家,企业app定制开发,中国机械加工网卸粮四通线程池 定义#xff1a;简单来说#xff0c;就是存放多个线程的池子。当创建线程池时#xff0c;就给池中存放一些线程#xff0c;如果有任务要执行#xff0c;就从池中取出一个线程执行任务#xff0c;依次类推#xff1b;当所有线程都在执行任务时#xff0c;其他任务…线程池 定义简单来说就是存放多个线程的池子。当创建线程池时就给池中存放一些线程如果有任务要执行就从池中取出一个线程执行任务依次类推当所有线程都在执行任务时其他任务暂时等待当线程执行完任务后不会被回收而是回到线程池中等待或继续执行其他的任务这样同一个线程就被反复利用从而减少创建线程销毁线程耗时耗费资源的问题。 1.套接字多线程 思想: 将接受客户端连接与和客户端进行数据通讯的操作分别放置在不同的线程中 实现用主线程实现接受客户端连接请求。 一旦一个客户端连接成功则创建一个线程在线程中实现与客户端进行数据通讯。 优缺点 1. 思想简单实现比较容易 2. 效率低下因服务器要频繁的创建和销毁线程。 2.线程池 思想在客户端尚未连接前先创建一定数量的线程并让线程处于睡眠状态。当客户端连接后,投递一个任务(就是和客户端进行数据通讯)到任务队列并唤醒线程线程竞争执行任务队列中的任务,当线程处理完当前任务并不销毁(退出)而是接着处理下一次任务。 实现 1.创建线程池 typedef struct _task
{
void* (*taskfun)(void*);
void *argp;
struct _task *next;
}task_t;typedef struct
{
int thread_num; //线程池中开启的线程数
int queue_num; //任务队列当前的任务数
int queue_max_size; //任务队列的容量
pthread_mutex_t mutex; //互斥锁
pthread_cond_t queue_empty; //用于阻塞线程的条件变量
pthread_cond_t queue_full; //用于阻塞任务添加模块的条件变量
pthread_t *id; //用于存储线程ID
task_t *head; //任务队列的队头指针
task_t *tail; //任务队列的队尾指针
}threadpool_t;2.初始化程池 int threadpool_init(threadpool_t *pool, int tnum,int qsize); 3.线程函数 功能访问任务队列取出每一个任务结点执行结点函数。 4.任务队列 功能用于协调线程与任务添加模块也就是说任务添加模块向任务队列投递任务结点线程取出任务结点执行。 5.任务添加模块 功能产生任务结点并将任务结点投递到任务队列。 优缺点 1. 效率相对来讲比较高 2. 实现比较复杂。