学习线程池的知识需要掌握线程池的基本概念,线程池的适用场景,线程池的体系结构
一:线程池的基本概念
了解线程池的基本概念,我们需要了解下面的几个知识点
1 线程池是什么?
2: 线程池的作用?
3: 线程池解决了什么问题?
4:线程池的框架:线程池有哪些组成的.
什么是线程池
线程池是存放一组线程的队列,我们通过这线程队列来执行一系列的任务。
我们如果要用到线程池,只需把任务添加到线程池中,线程池会自动创建线程来执行任务。所以使用线程池不需要自己创建线程,而是通过线程池来创建和执行和管理线程.(这个描述涉及到几个问题:怎么创建线程,怎么执行任务,如何设计一个线程池,需要考虑到哪些情况,这在以后的学习中都需要解答的)
线程池的技术背景:
线程池的技术解决了什么问题。
因为在开发中,创建和销毁对象是很费时间的,所以提高服务器程序效率的一个手段就是尽量的减少创建和销毁对象的次数,比如我们经常用到的连接池的技术就是这个道理,所以线程池的目的也是如此,因为创建线程和销毁线程是比较费资源的,假设在开发中需要频繁的创建线程和销毁线程的话,那么会非常的占用资源,通过预先建立一个线程池可以解决这个问题。(具体如何实现呢?)
线程池的好处
可以解决处理器单元内多个线程执行的问题。它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。
线程池的适用场景:
线程池技术如何提高服务器的性能。
假设一个服务器一天要处理50000个请求,并且每个请求需要一个单独的线程完成。我们比较利用线程池技术和不利于线程池技术的服务器处理这些请求时所产 生的线程总数。在线程池中,线程数一般是固定的,所以产生线程总数不会超过线程池中线程的数目或者上限(以下简称线程池尺寸),而如果服务器不利用线程池 来处理这些请求则线程总数为50000。
- 需要大量的线程来完成任务,且完成任务的时间比较短。 WEB服务器完成网页请求这样的任务,使用线程池技术是非常合适的。因为单个任务小,而任务数量巨大,你可以想象一个热门网站的点击次数。 但对于长时间的任务,比如一个Telnet连接请求,线程池的优点就不明显了。因为Telnet会话时间比线程的创建时间大多了。
- 对性能要求苛刻的应用,比如要求服务器迅速相应客户请求。
- 接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用。突发性大量客户请求,在没有线程池情况下,将产生大量线程,虽然理论上大部分操作系统线程数目最大值不是问题,短时间内产生大量线程可能使内存到达极限,并出现"OutOfMemory"的错误。
线程池的组成部分
一般线程池的内部结构:
线程池管理器:来调度这些线程
工作线程: 正在工作的线程
请求接口:创建请求对象,让工作线程调度任务的执行.
请求队列:用于存放请求的任务,工作线程从请求队列读取任务.
结果队列:用于存储执行后返回的结果.
总结:
这篇文章介绍了线程池是什么,产生的技术背景,组成部分,以及线程池的意义,线程池的应用场景?
那么如果我们要自己设计一个线程池,应该如何设计呢?需要考虑哪些问题呢?
引用资料:
相关推荐
ThreadPool 线程池管理单元 带调用例子
Thread线程和ThreadPool线程池 Thread:我们可以开启一个线程。但是请大家记住:线程开启会在空间和时间上有不小的开销。所以,不能随便开。 ThreadPool:会根据你的CPU的核心数开启一个最合适的线程数量。如果你...
delphi版线程池调用,这个小项目网上实例很容易找到,对delphi初学者而言,仔细跟中调用步骤,更能理解实现。
C语言版现成池 任务队列 可扩展为线程组
自己实现的Python实现的线程池源码,测试通过
主要介绍了C#多线程ThreadPool线程池的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
DELPHI的线程池例子,可以直接使用.很方便.模仿.Net ThreadPool的线程池控件
C++11 线程池 ThreadPool 单例 线程池,实现全局唯一。
C# 多线程 线程池 线程同步 单线程 线程的开始、挂起、恢复、结束、同步和异步
threadpool线程池代码举例
threadpool线程池学习
线程池ThreadPool。
C#判断线程池中所有的线程是否已经完成.doc
C#winform程序Thread(线程)和ThreadPool(线程池)的基本用法
C++11 加入了线程库,从此告别了标准库不支持并发的历史。然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池、信号量等
ThreadPool 线程池+任务队列
线程池threadpool_src,非常实用的线程池代码,好用方便!
ThreadPool 线程池类 DEFAULT_POOL_SIZE 默认线程池大小 threadPool 线程队列 taskQueue 任务队列 poolSize 自定义线程池大小 通过构造启动该线程池,调用addTask 方法将task任务传入,线程池会自动分配线程去执行...