您的位置:首页 > Web前端

Nutch1.7源码再研究之---14 Fetch中的监视器代码

2014-10-17 00:00 316 查看
此刻,我们知道QueueFeeder线程和FetcherThread-生产者和消费者线程都在跑,

此时主线程做什么?它在监视整个运行空间。代码如下:

----------------------------------------------------------------------------------

pagesLastSec = pages.get();

bytesLastSec = (int) bytes.get();//保存上一次的2个结果

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

}//休眠一秒

pagesLastSec = pages.get() - pagesLastSec;

bytesLastSec = (int) bytes.get() - bytesLastSec;//重新取得结果

reporter.incrCounter("FetcherStatus", "bytes_downloaded",

bytesLastSec);

reportStatus(pagesLastSec, bytesLastSec);//更新结果

LOG.info("-activeThreads=" + activeThreads + ", spinWaiting="

+ spinWaiting.get() + ", fetchQueues.totalSize="

+ fetchQueues.getTotalSize());

//打印日志:活跃线程数,等待个数,剩下的需要fetch的item的个数。

说明:

1 如果在中间某个状态下活跃线程个数少的话,说明线程执行出现了异常,个人认为应该每个

死去的线程负责重启一个活跃线程,否则线程越来越少,岂不是慢得很。

2 fetchQueues.getTotalSize只是当前池子里的所有item,后续QueueFeeder会不停的读文件

补充到这个fetchQueues里。

------------------------------------------------------------------------------

接下来的一段代码:

if (!feeder.isAlive() && fetchQueues.getTotalSize() < 5) {

fetchQueues.dump();

}

这里真心不明白,这段代码干嘛的!

-----------------------------------------下面的一段代码,

由于throughputThresholdPages-------------:-1

所以不会执行。

--------------------------------------------------

然后是一段超时检测代码:

// some requests seem to hang, despite all intentions

if ((System.currentTimeMillis() - lastRequestStart.get()) > timeout) {

if (LOG.isWarnEnabled()) {

LOG.warn("Aborting with " + activeThreads

+ " hung threads.");

}

return;

}

如果在一定时间之内,没有线程更新fetch的时间,则主线程退出。

这里不需要对feeder和fetcher线程做控制吗?

------------------------------------------------------

好吧,无论如何,Fetch的部分讲解完了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Nutch Fetcher