zoukankan      html  css  js  c++  java
  • beanstalk源码剖析——tube和job的操作

    1. tube定义

    在beanstalk中,tube只是一个消息队列的名字,本身只是作为job的容器,因此不具有复杂的操作。

    由于job具有优先级,这里采用最小堆保存job

    job具有ready和delay两种状态,因此每个tube采用两个最小堆对job进行管理。

    tube结构

    2.tube管理

    tube的操作定义在tube.c中,

    采用一个全局变量tubes管理所有的tube,而每个tube采用引用计数的方式进行管理。

    tubes定义为一个集合,采用数组的方式实现。

    tube的查找采用的遍历操作的方式,因此性能并不高。在实际使用时每个实例不要包含过多的tube。

    不过,如果use和watch操作比较少时,性能影响并不大,因为tubes的遍历只有在use、watch、state、pause的时候才会发生。其他时候使用连接自己管理的tube。

    tube.c

    3. job定义

    job属于消息队列中的一个消息,因此必须同时注重内存管理和binlog生成。

    job结构

    4. job管理

    为了保存job,整个实例采用一个全局数组保存所有的job。

    因此这里存在一个问题就是如何找到一个job?通过hash的方式将job映射到数组元素中。

    job的管理主要是增删查复制操作。

    job.c


     

  • 相关阅读:
    C. Shaass and Lights 解析(思維、組合)
    D. Binary String To Subsequences(队列)(贪心)
    CodeForces 1384B2. Koa and the Beach (Hard Version)(贪心)
    CodeForces 1384B1. Koa and the Beach (Easy Version)(搜索)
    CodeForces 1384C. String Transformation 1(贪心)(并查集)
    CodeForces 1384A. Common Prefixes
    POJ-2516 Minimum Cost(最小费用最大流)
    POJ3261-Milk Patterns(后缀数组)
    HDU-1300 Pearls(斜率DP)
    HDU-4528 小明系列故事-捉迷藏(BFS)
  • 原文地址:https://www.cnblogs.com/blockcipher/p/3279382.html
Copyright © 2011-2022 走看看