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


     

  • 相关阅读:
    如何查看linux系统是32位还是64位
    netstat 的10个基本用法
    linux入门教程(十) 文档的压缩与打包
    linux入门教程(九) 文本编辑工具vim
    linux入门教程(八) Linux磁盘管理
    linux入门教程(七) linux系统用户以及用户组管理
    CentOS5下配置JDK1.6+TOMCAT6
    【Nodejs】外研社一年级起各年级英语音频下载(缺456年级上)
    【Nodejs】外研社一年级起三年级下MP3下载爬虫1.00
    【Python】torrentParser1.03
  • 原文地址:https://www.cnblogs.com/blockcipher/p/3279382.html
Copyright © 2011-2022 走看看