线程池的基本概念

    多线程编程实现通信需要考虑数据的正确性。除此之外,多线程编程还需要考虑开销、性能的问题。于是在此时引出了线程的一种使用模式,叫做线程池。线程池,顾名思义,把一堆开辟好的 线程放在一个池子里统一管理,就是一个线程池。
    之所以出现了线程池的概念,部分原因是考虑线程的频繁创建和销毁会消耗大量时间和资源。设想在一个传统的服务器中,有这样一种监听线程用来监听是否有新的用户连接服务器,每当有一个新的用户加入,服务器就开启一个新的线程处理这个用户的数据包。这个线程只服务于这个用户,当用户与服务器断开连接以后,服务器就销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。在大量用户的情况下,这种情况方式将浪费大量的时间。而线程池与传统的一个用户对应一个线程的处理方法不同。它的基本实现思想就是在程序开始时就在内存中开辟一些线程,线程的数量是固定的,它们独自形成一个类,屏蔽了对外的操作,服务器只需要将数据包交给线程池就可以。当有一个新的用户请求到达时,不是新创建一个线程为其服务,而是从“池”中选择一个空闲的线程为新的用户请求服务,服务完成后,线程进入空闲线程池中。如果没有线程空闲的话,就将数据包暂时累积,等待线程池中有空闲的线程以后再进行处理。

一个线程池主要包括以下几个组成部分:
(1)线程管理器:创建并管理线程池。
(2)工作线程:线程池中实际执行任务的线程。在初始化线程池时,将预先创建好固定数目的线程在池中,这些初始化的线程一般处于空闲状态。
(3)任务接口:每个任务必须实现的接口,当线程池的任务队列中有可执行任务时,被空闲的工作线程调去执行,把任务抽象成接口,可以做到线程池与具体的任务无关。
(4)任务队列:用来存放没有处理的任务,提供一种缓冲机制,实现这种结构的方法有很多,常使用队列,主要运用先进先出的原理。
总结的说,在何种场合下会创建线程池。当一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程的创建和销毁带来的开销就不容忽视。如果线程创建和销毁的时间相比任务执行时间可以忽略不计,则没有必要使用线程池。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值