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


     

  • 相关阅读:
    运维文档的几点看法
    cmpp短信网关对接MSGID问题
    一文带解读C# 动态拦截覆盖第三方进程中的函数(外挂必备)
    C#中的解构
    如何科学破解慢SQL?
    c# HttpClient 上传文件并带参
    React 页面跳转传值
    Mysql 优化:status这类字段适合加索引吗?
    PHP数组高效去重
    PHP unset()、array_unique()的坑
  • 原文地址:https://www.cnblogs.com/blockcipher/p/3279382.html
Copyright © 2011-2022 走看看