• 注册
当前位置:代码四四五 > 默认分类 >正文

多核分布式队列的实现:“偷”与“自私”的运用(3)

5. 进队出队操作
分布式队列的进队出队操作根据不同应用类型具有不同的操作策略,但是不论何种类型的操作,其基本思想必须以 本地队列操作最大化 作为前提条件。下面给出分布式队列中常用的进队出队操作类型。
1) 出队操作
出队操作比较简单,通常都是先从本地队列中获取数据,如果本地队列为空,那么再从共享队列池中获取数据。
由于先从本地队列中获取数据,因此有助于实现本地队列操作的最大化。
出队操作的流程图如下:
2 :分布式队列的出队操作流程图
2) 进队操作
进队操作相比于出队操作要复杂一些,常用的操作策略有以下两种:
策略 1 :先判断本地队列是否为空,如果为空则将数据放入本地队列中;然后判断共享队列池中是否满,如果满则将数据放入本地队列中,否则放入共享队列中。
在这种策略的进队操作中,首先考虑的是本地队列的操作问题,本地队列至少要有一个数据,然后考虑的问题是负载平衡问题,共享队列池中的数据主要用于各线程间数据的负载均衡。共享队列池的大小必须做出限制,否则数据全部都进到共享队列池中去了,本地队列未得到有效使用。
共享队列池到底设定多大,才能使得本地队列操作最大化与负载平衡问题之间取得一个好的均衡,是在实际情况中需要考虑的问题,最好通过测试程序性能去获取一个合适的值。
进队操作策略 1 的操作流程图如下:
3 :分布式队列的进队操作策略 1 的流程图
策略 2 :当有多个数据需要进队时,先放入一些数据到本地队列中,然后剩下的数据再放入共享队列池中,如果队列池满的话,则仍然放入本地队列中。
本策略中,通常是进队的线程马上自己要从队列中获取数据,因此要先放入一些数据到自己的本地队列中,保证下次从队列中取数据一定是从本地队列中获取,可以大大提高本地化队列操作的频率,有效降低共享队列池的操作,大大减少了同步操作。
进队操作策略 2 的操作流程图如下:
4 :分布式队列的进队操作策略 2 的流程图
有了进队操作和出队操作的详细流程后,实现分布式队列的具体代码就容易多了。下面就来实现 CDistributedQueue 类的各个操作的详细源代码。

本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/130448,如需转载请自行联系原作者

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 162202241@qq.com

最新评论
  • 寇良力
    2024-04-03 电脑端
    # 1楼
    多核任务分配

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 端木敬信
    2024-04-03 电脑端
    # 2楼
    多核调度算法

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 阳东
    2024-04-03 电脑端
    # 3楼
    多核并行处理架构

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 仰昌
    2024-04-03 电脑端
    # 4楼
    多核调度

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 古婷裕
    2024-04-03 电脑端
    # 5楼
    多核技术

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 苗飘
    2024-04-03 电脑端
    # 6楼
    多核操作系统原理

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 陆保
    2024-04-03 电脑端
    # 7楼
    多核技术的定义与作用

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 苍光辉
    2024-04-03 电脑端
    # 8楼
    多核cpu如何分配任务

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 墨菁
    2024-04-03 电脑端
    # 9楼
    多核cpu怎么分配进程

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 酆真奇
    2024-04-03 电脑端
    # 10楼
    多核同步问题

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复

欢迎您发表评论:

请登录之后再进行评论

登录