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


     

  • 相关阅读:
    微博转发的内容如何实现点击人名跳转到个人主页
    解决json_encode中文UNICODE转码问题
    ***git自动化部署总结
    **Git本地仓库图解
    我 Git 命令列表 (1)【转】
    Git
    git pull使用【转】
    git merge简介【转】
    获得内核函数地址的四种方法
    【笔记】一些linux实用函数技巧【原创】
  • 原文地址:https://www.cnblogs.com/blockcipher/p/3279382.html
Copyright © 2011-2022 走看看