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


     

  • 相关阅读:
    activity
    笔记
    创建敌人基类
    让精灵改变方向并前进
    给敌人精灵创建帧动画
    每帧创建一个item
    lua -- 所有UI组件的基类
    lua -- 系统提示框
    lua -- 生成协议
    ES6,数组遍历
  • 原文地址:https://www.cnblogs.com/blockcipher/p/3279382.html
Copyright © 2011-2022 走看看