快捷搜索:

Lucene 3.0.0细节初窥(1)-深入探索Lucene的consumer与p

写在前面的一些废话:

对付Lucene 3.0.0的线程模型我异常的感兴趣, 由于对付多线程我也是近来才打仗, 别看我打仗法度榜样都快十年了, 有几个地方我不停异常的遗憾 : 没有写过收集相关的代码, 没有写过多线程法度榜样, 没有写过数据库相关的内容, 没有写过Linux相关的法度榜样. 可能各位会感觉异常稀罕了: 那你这十年干嘛去了? 这不是基础上等同于不懂法度榜样啊! (–_-)

我花了6年的光阴巩固了算法和数据布局根基, 别的4年糊里糊涂的搞了很多比如3D游戏, 游戏的人工智能法度榜样等内容, 总体上来说, 没有太多虚度光阴 代码写得不算多, 算法根基不坏, 不过效率也不算蛮高, 我盼望能够在接下来的几年内好好补一补, 逐步变成一个"万金油" 把紊乱无章的器械都搞搞.

对付钻研别人的法度榜样我有一个喜欢, 相对付停顿在"应用"的层面上, 还不如停顿在"钻研"的层面上, 我的感到是, 在事情之前应该只管即便的把根基作牢靠, 能够多把别人代码中先辈的思惟学会, 不然事情了今后, 项目的压力和生活的压力会让人浮躁, 会让人没有一个定力来钻研必要花费很多光阴去搞懂的内容. 着实今朝的开源框架(比如说apache下面的)和可以免费应用的框架(比如WPF之类的)已经异常的多了, 想要仅仅是"做"完一个项目着实不算难事, 当然是一样平常的项目, 不是宏大年夜的项目. 紧张的是, 怎么把自己的思惟提升到更高的层面, 我盼望我能按照自己的设法主见来成长. 可能这也是我大年夜学来没有接过一个外包项目的缘故原由吧.

经由过程写日志我想和大年夜家分享我的心得, 对付一个开源框架的钻研, 可能也是必要一个小小的团队一路来做, 一小我涉猎着海量的代码是一件异常苦的工作, 假如有人评论争论一下, 可能很多问题都邑水到渠成了. 别的对付Lucene, 我盼望能够在对源代码有着相称的把握后, 应用操作系统无关的库和c++进行一些重写, 对付关键的代码实现一下, 一方面的缘故原由是, 今后事情的说话是c++而不是java, 另一方面也是为自己留下一些"可用"的代码. 这个依然是停顿在"钻研"的层面上, 未来这个项目能否成长为"可用" 必要再看看.

Lucene 3.0.0的Consumer调用部分(续):

Lucene的线程布局和Lucene的Consumer模型是亲昵相关的, 之前我有一篇日志纪录了一些关于Lucene的Consumer的部分, 关于这些内容请见: Lucene 3.0.0 之样例解析(3)-IndexFiles.java, 之前写的对照粗拙, 有好些内容是没有纪录完全的, 这里就弥补一下:

为懂得开繁杂的consumer调用模型, 我试着绘制一下uml图来理清思路:

跟consumer和processor类直接相关的类就有下面的这些, 看起来挺可怕的吧, 下面我来试图将他们之间的关系理清楚:

值得留意的是, 在涉猎代码的时刻发明, 有些时刻, 就算是两个抽象类的措施如出一辙, 也没有应用承袭的关系来做, 可能是Lucene的开拓者为了不呈现RTTI的差错吧, 这个在初次涉猎代码的时刻很轻易把人弄肴杂.

1) DocFieldProcessor, DocFieldProcessorPerThread与DocInverter:

DocFieldProcessor

DocFieldProcessor承袭自DocConsumer, 这个DocConsumer可以说是最高层的Consumer了. 下面我们来看看DocFieldProcessor的内容, 查看代码的时刻会发明一句话:

1: /**

2:* This is a DocConsumer that gathers all fields under the

3:* same name, and calls per-field consumers to process field

4:* by field.This class doesn't doesn't do any "real" work

5:* of its own: it just forwards the fields to a

6:* DocFieldConsumer.

7:*/

您可能还会对下面的文章感兴趣: