加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux线程池

发布时间:2022-10-11 17:01:47 所属栏目:Linux 来源:转载
导读: 我们在写服务器的时候,通常需要处理多个客户端的频繁请求,这就需要频繁的创建线程和销毁线程,对CPU的消耗比较大,而线程池就是对这种情况的优化。
线程池的思路:
程序启动之前,初始化

我们在写服务器的时候,通常需要处理多个客户端的频繁请求,这就需要频繁的创建线程和销毁线程,对CPU的消耗比较大,而线程池就是对这种情况的优化。

线程池的思路:

程序启动之前,初始化线程池,启动线程池中的线程,由于还没有任务到来,线程池中的所有线程都处在阻塞状态,当一有任务到达就从线程池中取出一个空闲线程处理,如果所有的线程都处于工作状态,就添加到队列,进行排队。如果队列中的任务个数大于队列的所能容纳的最大数量,那就不能添加任务到队列中线程池linux,只能等待队列不满才能添加任务到队列中。

何时不使用线程池线程

● 如果需要使一个任务具有特定优先级
● 如果具有可能会长时间运行(并因此阻塞其他任务)的任务
● 如果需要将线程放置到单线程单元中(线程池中的线程均处于多线程单元中)

● 如果需要永久标识来标识和控制线程,比如想使用专用线程来终止该线程,将其挂起或按名称发现它

一般使用线程池的程序的特点

● 需要花费大量的时候,并且请求的时间比较短。
● 对性能要求苛刻的应用,比如要求服务器迅速响应客户请求。
● 接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用

因为这里涉及到多个线程同时访问一个队列的问题,所以我们需要互斥锁来保护队列,同时还需要条件变量来处理主线程通知任务到达、工作线程抢夺任务的问题。

1、线程池结构,它负责管理多个线程并提供任务队列的接口

2、任务队列,存放待处理的任务

这里写图片描述

大体框架如下:

这里写图片描述

这里写图片描述

源码下载请戳链接

线程池的实现

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!