存储在传染媒介的哈希表或传染媒介的队列

时间:2013-02-20 02:56:57

标签: data-structures hashmap queue client-server server-side

我有一个服务器多客户端服务器 - 在从客户端收到消息后,服务器需要在将其传递给另一个客户端之前对其进行处理。

我不知道我想做什么是最好的实现,所以将不胜感激任何帮助。这些消息将按时间间隔发送,因此在从特定时间发送的结构进行访问之前,需要接收,处理消息并将其推送到结构中。该消息有两个属性:目标和优先级。访问将以两种模式的时间间隔执行:特定于客户端节点,或者对所有节点开放以进行接收。

  1. 如果时间间隔仅允许特定节点接收,则会发生的情况是从最高优先级到最低优先级检查所有队列,即以最高优先级发送的最早消息将从结构“推出”。
  2. 如果时间间隔为“打开”,则无论节点如何,最高优先级的最早消息将被“推出”。
  3. 我首先想到它可能是vector<vector<queue<message>>,但我意识到根据第2点进行搜索效率不高。我将不胜感激任何建议!我被告知使用哈希地图,但我没有这方面的经验,如果这是最好的方法,我会很感激。

    编辑:将同一个消息推送到两个不同的结构是一个更好的解决方案吗?一:根据优先级进行分类,矢量保持FIFO队列(每个优先级一个)。二:根据节点vector<vector<queue<message>>对其进行分类。

1 个答案:

答案 0 :(得分:1)

除非人们对尺寸和速度有所了解,否则没有人可以回答这个问题。所以,我想我会提出一些我想出的选择。

选项1 - 超级计算机假设我们假设一台超快速机器,与所涉及的数据量相比。我们可以简单地将消息存储在无序列表中,因为每次运行列表都足够快(平均而言,我们需要运行列表的一半)。

选项1A - 让我们打扰一下:按优先级+到达时间排序的列表会使“开放”响应变快,因为我们只是从“顶部”开始。对于特定于节点的响应,我们通常搜索的次数少于一半,因为最高优先级都在接近开始

选项2 - 低资源,一百个节点,数百条消息:如果数据结构中的插入时间不那么重要,那么您只需要尽可能短的响应时间你需要发送一条消息,然后你需要一个全局队列,这样你就可以在间隔打开时弹出。您还需要特定于节点的队列。最后,您需要一种方法即时访问特定于节点的队列。这意味着:

  1. 全球有序列表
  2. N节点特定的有序列表
  3. 由Node-Id键入的地图,并指向特定于节点的列表
  4. 正如我所看到的,痛苦的部分是同步,以便每次都从全局和特定于节点的列表中删除(添加时相同)

    我的第一个想法是将每个消息包装在一个包装器中,该包装器就像一个双向链表中的节点。但是,它实际上是两个列表。包装器将具有基于全局优先级的Prev和Next;但是,根据节点特定的优先级,它也会有Prev和Next。这样,您只能获得一个消息本身的副本,同时以标准方式修复prev / next指针。 (这基本上结合了上面的#1和#2)。

    对于#3,我会保留一个地图,但不是查找特定于节点的列表,而是指向该特定节点的“头部”包装。

    这是一张图片,用来说明。 Double Duty, doubly-linked list

    听起来很有趣!