
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
线程池技术的应用在许多软件开发项目中都是非常常见的一个编程技术,而本文我们就通过案例分析来简单了解一下,线程池应用基础知识分享。
一、线程池的具体使用
线程池管理一个工作者线程的同构池(homogeneouspool).线程池是与工作队列(workqueue)紧密绑定的.所谓工作队列,其作用是持有所有等待执行的任务.工作者线程的生活从此轻松起来:它从工作队列中获取下一个任务,执行它,然后回来继续等待下一个任务.
使用线程池的好处:
1.重用存在的线程,而不是创建新的线程,这可以在处理多请求时抵消县城创建、消亡产生的开销.
2.另外一个额外的好处就是,在请求到达时,工作者线程通常已经存在,用于创建线程的等待时间并不会延迟任务的执行,因此提高了响应性.
3.通过适当地调整线程池的大小,你可以得到足够多的线程以保持处理器忙碌,同时还可以防止过多的线程相互竞争资源,导致应用程序耗尽内存而失败.
二、无限制创建线程的缺点
1.线程生命周期的开销.线程的创建与关闭不是"免费的".如果请求是频繁的且轻量的,就像大多数服务器程序一样,那么为每个请求创建一个新线程的做法就会消耗大量的计算资源.
2.资源消耗量.活动线程会消耗系统资源,尤其是内存.如果可运行的线程数多于可用的处理器数,线程将会空闲.大量空闲线程占用更多内存,给垃圾回收器带来压力,而且大量线程在竞争CPU资源时,还会产生其他的性能开销.如果你已经有了足够多的线程保持所有CPU忙碌,那么再创建更多的线程是有百害而无一利的.
3.稳定性.应该限制可创建线程的数目,否则可能会出现内存溢出错误.
凡事有度,在一定范围内,增加线程可以提高系统的吞吐量,一旦超出了这个范围,再创建更多的线程只会拖垮你的程序.创建过多的线程,会导致应用程序面临崩溃.为了摆脱这种危险,应该设置一个范围来限制你的应用程序可以创建的线程数,然后彻底地测试你的应用程序,确保即使线程数到达了这个范围的极限,程序也不至于耗尽所有的资源.
"每任务每线程(thread-per-task)"方法的问题在于它没有对已创建线程的数量进行任何限制,除非对客户端能够抛出的请求速率进行限制.像其他的并发危险一样,无限制创建线程的行为可能在原型和开发阶段还能表现得运行良好,而当应用程序部署后,并运行于高负载下,它的问题才会暴露出来.所以一个恶意用户或者足够多的用户,都会使你的WebServer的负载超过某个确定的极限值,从而导致服务器的崩溃.对于一个服务器,我们希望它具有高可用性,而且在高负载下可以平缓地劣化,但是上面的问题对我们的目标是个严重的阻碍.
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。