• 数据结构(三):队列


    队列:先入先出(FIFO)表。

    常用操作

    • Enqueue:入队,即将数据写入队列末尾
    • Dequeue:出队,即将队列开头的元素从队列中删除并返回

    应用场景

      队列通常用来实现消息(任务)的快速读写,即消息队列。消息队列的常用来解决如下问题:

    • 提升系统的吞吐量:通过引入消息队列,将不是必须的业务逻辑异步处理,用户请求写入消息队列后即返回响应,而不必等待全部的业务逻辑完成,提高了cpu利用效率。
    • 实现应用解耦:用户请求通常是由一系列子业务系统配合完成,引入消息队列,可以避免业务系统间直接的相互调用,从而实现应用解耦,各子系统间相互独立,降低系统复杂度。
    • 流量削峰:类似秒杀的活动中,可以通过消息队列控制活动人数,消息队列满后,直接抛弃用户请求,缓解短时间内的高流量对服务器的压力。
    • 消息通讯:利用消息队列高效的通讯机制,实现点对点通讯或聊天室。
    • 日志处理:日志采集客户端将日志写入消息队列,日志处理服务器从读取消息队列中的日志,解决大量日志传输问题。

    实现方式

    • 链表实现:比较简单,不再赘述
    • 数组实现:用数组实现一个队列,需要考虑元素出队后,数组位置单元循环利用的问题,即队列的循环数组实现

    使用循环数组实现一个队列:

     1 from array import array
     2 
     3 class arr_queue(object):
     4     def __init__(self, maxsize):
     5         self._array = array('i', range(maxsize))
     6         self._head = 0
     7         self._tail = 0
     8         self._length = 0
     9         self._maxsize = maxsize
    10 
    11     def enqueue(self, value):
    12         if self._length >= self._maxsize:
    13             raise Exception('queue is full')
    14         self._array[self._tail] = value
    15         self._length += 1
    16         self._tail += 1
    17         if self._tail >= self._maxsize:
    18             self._tail = 0
    19 
    20     def dequeue(self):
    21         if self._length <= 0:
    22             raise Exception('queue is empty')
    23         value = self._array[self._head]
    24         self._length -= 1
    25         self._head += 1
    26         if self._head >= self._maxsize:
    27             self._head = 0
    28         return value
    29 
    30     def __len__(self):
    31         return self._length
  • 相关阅读:
    linux shell dash&bash(转)
    GNU Linux Boot ID Machine ID
    MAC地址对照表
    设备树中的spi设备以及内核对spi节点的处理流程(转)
    CRC32 逆向算法的C语言实现(转)
    ZYNQ7045 系统升级实现方法(multiboot)(转)
    echarts 如果打开多个页面直折线图不展示,及echarts和radio-group的结合使用
    Openwrt SSH免密码登录linux服务器
    让windows10支持多用户连接
    打印SQL日志
  • 原文地址:https://www.cnblogs.com/sheshouxin/p/10699317.html
Copyright © 2020-2023  润新知