资源池与线程池
1. 资源池
1.1. 简介
- 是一种配置机制,用于对主机资源进行分区。当某一个资源使用完后,资源池把相关的资源的忙标示清除掉,以示该资源可以再被下一个请求使用
- 每个主机均具有一个默认的资源池,所有的进程最初均与该资源池绑定。新创建的资源池会从默认池中获取处理器
1.2. 目的
提高性能
1.3. 运作机制
由资源池管理器提供一定数目的目标资源,当有请求该资源时,资源池分配给一个,然后给该资源标识为忙,标示为忙的资源不能再被分配使用
1.4. 参数
- 初始资源的数目。资源池启动时,一次建立的资源数目,资源池最少要保证在这个数目上
- 最大资源的数目。当请求的资源超出这个数目,就等待
1.5. 常见的资源池
- 连接池。数据库连接池
- 对象池。web 容器中的 request, response 对象池
- 线程池(thread pool)
2. 线程池
2.1. 背景
- 线程过多会带来调度开销(线程切换开销),进而影响缓存局部性和整体性能
- 在处理短时间任务时创建与销毁线程的代价过大
2.2. 简介
- 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务
- 线程池线程都是后台线程
- 每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中
- 如果某个线程在托管代码中空闲(如正在等待某个事件), 则线程池将插入另一个辅助线程来使所有处理器保持繁忙
- 如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程,但线程的数目永远不会超过最大值
- 超过最大值的线程可以排队,但他们要等到其他线程完成后才启动
2.3. 优点
- 避免在处理短时间任务时创建与销毁线程的代价
- 不仅能够保证内核的充分利用,还能防止过分调度
2.4. 线程池结构
- 线程池管理器。创建并管理线程池
- 工作线程。线程池中的线程
- 任务接口 taskHandle。每个任务必须实现接口以供工作线程调度执行任务
- 任务队列。用于暂存未处理任务(缓冲机制)
2.5. 应用场景
- 需要大量的线程来完成任务,且完成任务的时间比较短。 eg. WEB 服务器完成网页请求这样的任务
- 对性能要求苛刻的应用。eg。 要求服务器迅速响应客户请求
- 可能出现突发性的大量请求(创建大量线程)。eg. 双 11,0:00 网页请求。利用线程池技术有效地调度线程资源,缓冲作用不至于使服务器突然产生大量线程的应用。短时间内产生大量线程可能使内存到达极限,并出现”OutOfMemory”的错误
相关文章