欢迎来到天天文库
浏览记录
ID:24991899
大小:53.50 KB
页数:5页
时间:2018-11-17
《线程池技术的研究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、线程池技术的研究
2、第1内容加载中...摘 要:服务器程序利用线程技术响应客户请求已经司空见惯,但不同的实现方式可能会对服务器的效率产生很大影响。使用线程池技术可以显著地改善服务器应用程序的性能。文章介绍了线程池技术的设计模型、基本原理及优化方法,并讨论了服务器程序如何利用线程池来优化性能。 关键词:线程池;服务器;线程;并发服务ResearchofThreadPoolTechniqueLIHao,LIUZhijing (puterInformationResearchCenter,XidianUniversity,Xi′an,710071,China) Abstract:It′
3、smontoseethatthethreadtechnologyhasbeenusedinserverapplications,butthedifferentmethodmaycausedifferentresult.Theuseofthreadpooltechnologycanlargelyimprovetheserverperformance.Thispaperexplainsthemoduleofthreadpooldesign,thetheoryofthreadpoolandtheoptimizationofthreadpool,anddiscusshoizetheserv
4、erapplication′scapabilityusingthreadpool.Keyouseg(this)">1.2 线程池(ThreadPool) 在应用服务器中需要处理从客户端发起的任务请求,这些任务往往具有高密度、短时间的特性,无论通过什么方式在服务器得到客户端请求后,服务器都需要独立地处理这个客户请求。针对这个问题,线程池提供了处理系统性能和大用户量请求之间的矛盾的方法,通过对多个任务重用已经存在的线程对象,降低了对线程对象创建和销毁的开销。当客户请求时,线程对象已经存在,可以提高请求的响应时间,从而整体地提高了系统服务的表现。 多线程技术主要解决处理器单元内多个线
5、程执行的问题,他可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。但如果对多线程应用不当,会增加对单个任务的处理时间。可以举一个简单的例子: 假设在一台服务器完成一项任务的时间为T: T1为创建线程的时间; T2为在线程中执行任务的时间,包括线程间同步所需时间; T3为线程销毁的时间。 显然T=T1+T2+T3。当然这是一个极度简化的假设。 可以看出T1,T3是多线程本身带来的开销,我们渴望减少T1,T3所用的时间,从而减少T的时间。在程序中频繁地创建或销毁线程将导致T1和T3在T中占有相当比例。显然这是突出了线程的弱点(T1,T3),而不是优点(并发性)。
6、 线程池技术正是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能。他把T1,T3分别安排在服务器程序启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。 线程池不仅调整T1,T3产生的时间段,而且还显著减少了创建线程的数目。请看一个例子: 假设一个服务器一天要处理50000个请求,并且每个请求需要一个单独的线程完成。比较利用线程池技术和不利于线程池技术的服务器处理这些请求时所产生的线程总数。在线程池中,线程数一般是固定的,所以产生线程总数不会超过线程池中线程的数目或者上限(以下简称线程池尺寸),而如果服务器不利用线程池
7、来处理这些请求,则线程总数为50000。一般线程池尺寸是远小于50000。所以利用线程池的服务器程序不会为了创建50000而在处理请求时浪费时间,从而提高效率。 一个简单线程池应该至少包含下列组成部分: (1)线程池管理器(ThreadPoolManager) 用于创建并管理线程池。 (2)工作线程(grThread,m_hMgrIoPort和成员函数ManagerProc(void*p)构成,他管理和创建可重用的线程对象ap,m_hWorkerIoPort和成员函数WorkerProc(void*p)构成。他是一个独立的线程对象,通过ProcessJob方法执行由所在容器T
8、hreadPool传递的任务。 500)this.style.ouseg(this)"> (4)任务对象接口IoveThreads方法。1.5 线程池的应用范围 线程池技术适用于那些需要大量的线程来完成任务,且完成任务的时间比较短的情况。像Web服务器处理网页请求这样的任务,使用线程池技术是非常合适的。因为单个任务小,而任务数量巨大,可以想象为一个热门网站的点击次数。但对于长时间的任务,比如一个Tel连接请求,线程池的优点就不明显了。因为Tel会话时间比线程的创
此文档下载收益归作者所有