博客统计信息

51cto推荐博客
用户名:njulinq
文章数:31
评论数:37
访问量:64237
无忧币:259
博客积分:880
博客等级:4
注册日期:2010-02-13

OpenNMS全接触-线程池(五)
2010-03-14 00:40:06
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://njulinq.blog.51cto.com/1257169/283585

 为提高系统效率,OpenNMS在很多模块中启用了多线程,并通过线程池来对这些线程进行管理。而且具体线程数可以通过配置文件进行配置,例如在%OpenNMS_HOME%/etc/capsd-configuration.xml文件中,就可以对网络服务发现和服务重新扫描的线程数进行配置:

 

  1. <capsd-configuration  
  2.     rescan-frequency="86400000"  
  3.     initial-sleep-time="30000"  
  4.     max-suspect-thread-pool-size="10" 
  5.         max-rescan-thread-pool-size="10"> 

其中的max-suspect-thread-pool-size就定义了可以同时对多少个IP地址进行服务扫描,而max-rescan-thread-pool-size则定义了可以同时对多少个IP进行服务重新扫描。

本文将从源码来剖析其线程池的实现机制。在OpenNMS的代码中,是通过RunnableConsumerThreadPool来实现线程池的,我们首先看下该类是如何被使用的。

 

  1. m_runner = new RunnableConsumerThreadPool("Test Pool"0.6f, 1.0f,10); 

首先创建一个线程池对象,构造函数的4个参数,第一个和最后一个比较好解释,第一个就是线程池名字,给个名字主要在日志中比较好区分各个线程的执行轨迹,最后一个参数就是定义线程池的大小。第二个和第三个参数稍微解释下,它们分别定义了两个分水岭(或称预置),其实就是当前线程池负载情况。为解释这两个参数,首先需要定义几个概念:

  1. 等待调度对象: 等待调度对象就是所有需要执行的对象,它们最终都要进入线程池由线程池分配一个线程来执行
  2. 线程池: 线程池是所有线程的一个容器,它同时负责线程的创建、调度及销毁
  3. 线程: 线程不同于等待调度对象,它是物理可执行的对象,它负责最终执行等待调度对象,而且一般情况下,线程数都小于等待调度对象数目

有了上面几个概念,就比较好解释那两个参数了,这两个参数分别成为低水印值和高水印值,它的取值实际上是等待调度对象与线程池中线程数的比值。低水印值的含义是当比值小于这个值后,即等待调度对象少于线程池中线程数且达到某个度时,则需要销毁一些线程池中的线程数,以减少系统负载。而高水印值的含义则是当比值大于这个值后,在不超出线程池大小的前提下,增加线程池中线程数。所以一般情况下高水印值都是取1。

下面开始深入线程池的内部了,首先线程池是用了一个先进先出队列来保存等待调度对象,

 

  1. private SizingFifoQueue<Runnable> m_delegateQ; 

用一个简单的数组来保存线程池,

 

  1. private Fiber[] m_fibers; 
  2. private float m_hiRatio; 
  3. private float m_loRatio; 
  4. private int m_maxSize; 

 上面除了保存线程的数组外,另外三个变量依次表示高水印值,低水印值及线程池大小。

在下一篇文章中将介绍线程池的具体操作流程。

本文出自 “技术改变人生” 博客,请务必保留此出处http://njulinq.blog.51cto.com/1257169/283585

分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:网管软件技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2010-03-15 16:03:44
这个系列真不错!很受教!
博主回复:
2010-03-17 22:43:43
谢谢,希望大家能够一起学习!

2010-03-15 17:13:29
请问openNMS可不可以监控主机的进程,就是我指定某个进程,对这个进程进行监控。
博主可不可以留下邮箱,我现在想封装openNMS来实现我需要的一些功能,非常希望有个熟人可以指点一下,谢谢。
博主回复:
2010-03-17 22:41:40
请看站内信箱

2010-03-16 21:38:43
顶你一下,文章说实话我看不懂,但我知到写的很好,呵呵!
博主回复:
2010-03-17 22:44:04
还是你写的好,我能看懂,呵呵

2010-09-03 00:14:26
请问博主,我使用opennms时,为什么只是监控到协议,而对于CPU,内存等没有显示,而且无法生成图表。(对于您写的代码部分,因为业务紧急,我没有看,希望您见谅),我目前只想请教如何操作opennms,而却对于他的配置文件中的信息无法清楚其作用。
希望您能给下指点!

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: