zoukankan      html  css  js  c++  java
  • 多线程的 pipeline 设计模式

    多线程的 pipeline 设计模式

    一个简单例子:

    有很多个html网页,网页的id、title、url、path等信息存在一个数据库表中,网页内容存储在一个磁盘阵列上。现在要把所有网页都读 出来,统计其中的html标签、正文等信息,并写入另一个数据库表,怎样的设计最好呢?

    一般的想法是使用多个平行的线程,每个线程处理某个ID范围的网页。但是仔细分析就可以发现,对每个网页的处理可以分为以下处理步骤:

    1. 读取数据库行
    2. 读取文件内容
    3. 解析html,生成统计数据
    4. 将统计结果写入数据库

    这几个处理步骤有各自的特征,读取数据库的时间一般主要消耗在数据库服务器响应,读取文件内容一般主要消耗在磁盘IO上,解析、统计消耗在计算上, 写统计结果也消耗在数据库服务器响应上。如果我们为这几个过程建立各自的线程,每个任务通过消息队列来传递。就得到如下设计:

    在这个设计中,每个处理过程可以根据需要设置不同的线程数,这个例子中,数据库不会是瓶颈,只剩下读文件和计算,如果文件IO够快(如果网页存在不 同的阵列上),那么可以增加计算线程(服务器一般都是多CPU的)来达到平衡。

    一些例子或许还会有更多的处理步骤。

    可以从中得出一个设计模式,甚至可以直接写出实现框架的类:

    http://febird.javaeye.com/blog/363265
  • 相关阅读:
    P3275 [SCOI2011]糖果 题解
    hdu 2962 题解
    hdu 2167 题解
    hdu 2476 题解
    hdu 5418 题解
    2019.10.16&17小结
    poj 3061 题解(尺取法|二分
    poj 1852&3684 题解
    NOIP2017[提高组] 宝藏 题解
    一类经典问题的解法
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400328.html
Copyright © 2011-2022 走看看