写在前面的一些废话:

     对于Lucene 3.0.0的线程模型我非常的感兴趣, 因为对于多线程我也是最近才接触, 别看我接触程序都快十年了, 有几个地方我一直非常的遗憾 : 没有写过网络相关的代码, 没有写过多线程程序, 没有写过数据库相关的内容, 没有写过Linux相关的程序. 可能各位会觉得非常奇怪了: 那你这十年干嘛去了? 这不是基本上等同于不懂程序啊! (–_-)

     我花了6年的时间巩固了算法和数据结构基础, 另外4年糊里糊涂的搞了很多比如3D游戏, 游戏的人工智能程序等内容, 总体上来说, 没有太多虚度时间 代码写得不算多, 算法基础不坏, 不过效率也不算蛮高, 我希望能够在接下来的几年内好好补一补, 慢慢变成一个"万金油" 把乱七八糟的东西都搞搞.

     对于研究别人的程序我有一个爱好, 相对于停留在"使用"的层面上, 还不如停留在"研究"的层面上, 我的感觉是, 在工作之前应该尽量的把基础作牢固, 能够多把别人代码中先进的思想学会, 不然工作了以后, 项目的压力和生活的压力会让人浮躁, 会让人没有一个定力来研究需要花费很多时间去搞懂的内容. 其实目前的开源框架(比如说apache下面的)和可以免费使用的框架(比如WPF之类的)已经非常的多了, 想要仅仅是"做"完一个项目其实不算难事, 当然是一般的项目, 不是庞大的项目. 重要的是, 怎么把自己的思想提升到更高的层面, 我希望我能按照自己的想法来发展. 可能这也是我大学来没有接过一个外包项目的原因吧.

     通过写日志我想和大家分享我的心得, 对于一个开源框架的研究, 可能也是需要一个小小的团队一起来做, 一个人阅读着海量的代码是一件非常苦的事情, 如果有人讨论一下, 可能很多问题都会迎刃而解了. 另外对于Lucene, 我希望能够在对源代码有着相当的把握后, 使用操作系统无关的库和c++进行一些重写, 对于关键的代码实现一下, 一方面的原因是, 以后工作的语言是c++而不是java, 另一方面也是为自己留下一些"可用"的代码. 这个依然是停留在"研究"的层面上, 未来这个项目能否发展为"可用" 需要再看看.

     另外转帖请注明出处: leftnoteasy.cnblogs.com, leftnoteasy原创

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

     Lucene的线程结构和Lucene的Consumer模型是密切相关的, 之前我有一篇日志记载了一些关于Lucene的Consumer的部分, 关于这些内容请见: Lucene 3.0.0 之样例解析(3)-IndexFiles.java, 之前写的比较粗糙, 有好些内容是没有记载完全的, 这里就补充一下:

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

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

    值得注意的是, 在阅读代码的时候发现, 有些时候, 就算是两个抽象类的方法一模一样, 也没有使用继承的关系来做, 可能是Lucene的开发者为了不出现RTTI的错误吧, 这个在初次阅读代码的时候很容易把人弄混淆.

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

    1) DocFieldProcessor, DocFieldProcessorPerThread与DocInverter:

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

    DocFieldProcessor

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

/**
 * This is a DocConsumer that gathers all fields under the
 * same name, and calls per-field consumers to process field
 * of its own: it just forwards the fields to a
 * DocFieldConsumer.
 */
      翻译一下就是: DocConsumer把全部名称相同的Field聚集起来, 然后调用PerField为后缀的consumer进行处理, 这个类不做"实际"的工作, 它仅仅把工作推向了DocFieldConsumer.

相关文章:

  • 2022-12-23
  • 2021-06-19
  • 2021-10-12
  • 2021-06-22
  • 2022-12-23
  • 2022-02-27
  • 2021-05-26
  • 2021-08-12
猜你喜欢
  • 2022-01-22
  • 2021-10-21
  • 2021-09-23
  • 2021-04-14
相关资源
相似解决方案