线程池的介绍及简单实现[Java编程]
本文“线程池的介绍及简单实现[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
服务器程序操纵线程技术呼应客户恳求已经司空见惯,大概您认为这样做效率已经很高,但您有没有想过优化一下利用线程的办法.该文章将向您介绍服务器程序若何操纵线程池来优化性能并供应一个简单的线程池实现.
线程池的技术后台
在面向对象编程中,成立和销毁对象是很费时间的,因为成立一个对象要获得内存资源大概别的更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便可以在对象销毁后举行垃圾回收.所以提高服务程序效率的一个手段就是尽大概削减成立和销毁对象的次数,分外是一些很耗资源的对象成立和销毁.若何操纵已有对象来服务就是一个需求办理的关键问题,其实这就是一些"池化资源"技术产生的缘由.比方大家所熟习的数据库衔接池恰是遵守这一思惟而产生的,本文将介绍的线程池技术一样符合这一思惟.
目前,一些闻名的大公司都分外看好这项技术,并早已经在他们的产品中利用该技术.比方IBM的WebSphere,IONA的Orbix 2000在SUN的 Jini中,Microsoft的MTS(Microsoft Transaction Server 2.0),COM+等.
目前您能否也想在服务器程序利用该项技术?
线程池技术若何提高服务器程序的性能
我所提到服务器程序是指可以承受客户恳求并能处理恳求的程序,而不只是指那些承受网络客户恳求的网络服务器程序.
多线程技术主要办理处理器单元内多个线程履行的问题,它可以明显削减处理器单元的闲置时间,增添处理器单元的吞吐本领.但假如对多线程利用不当,会增添对单个任务的处理时间.可以举一个简单的例子:
假定在一台服务器完成一项任务的时间为T
T1 成立线程的时间
T2 在线程中履行任务的时间,包含线程间同步所需时间
T3 线程销毁的时间
明显T = T1+T2+T3.注意这是一个非常简化的假定.
可以看出T1,T3是多线程本身的带来的开销,我们巴望削减T1,T3所用的时间,从而削减T的时间.但一些线程的利用者并没有注意到这一点,所以在程序中频繁的成立或销毁线程,这招致T1和T3在T中占据相当比例.明显这是突出了线程的弱点(T1,T3),而不是长处(并发性).
线程池技术恰是关注若何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的.它把T1,T3辨别安置在服务器程序的启动和完毕的时间段大概一些闲暇的时间段,这样在服务器程序处理客户恳求时,不会有T1,T3的开销了.
线程池不但调整T1,T3产生的时间段,并且它还明显削减了成立线程的数目.在看一个例子:
假定一个服务器一天要处理50000个恳求,并且每个恳求需求一个单独的线程完成.我们对比操纵线程池技术和不利于线程池技术的服务器处理这些恳求时所产生的线程总数.在线程池中,线程数普通是固定的,所以产生线程总数不会超越线程池中线程的数目大概上限(以下简称线程池尺寸),而假如服务器不操纵线程池来处理这些恳求则线程总数为50000.普通线程池尺寸是远小于50000.所以操纵线程池的服务器程序不会为了成立50000而在处理恳求时浪费时间,从而提高效率.
这些都是假定,不能充分阐明问题,下面我将谈论线程池的简单实现并对该程序举行比较测试,以阐明线程技术长处及利用范畴.
以上是“线程池的介绍及简单实现[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |