0

在分布式计算设置中,我想将 unordered_set 发送到许多节点。我知道 C++ 中的序列化,例如使用boost::serialization. 我对序列化的不满是,在接收到序列化数据后,我面临着unordered_set在每个节点上重建数据结构的成本。

我的想法是为 unordered_set 编写一个自定义分配器,它分配固定大小的连续内存并在分配后返回起始内存地址。然后我想获取 的字节表示,通过网络unordered_set发送它,并告诉接收节点这块内存是一个unordered_set.

那行得通吗?你们有其他想法如何解决我的问题吗?或者您有任何相关的指示,例如编写这样的分配器?任何反馈表示赞赏。

谢谢!

4

1 回答 1

5

出于以下几个原因,这可能是一个坏主意:

  1. 通常,从一台机器到另一台机器的哈希实现会有所不同,因此您的哈希表在接收机器上将不再有效。
  2. 哈希表实现通常会包含指针。您不能只是将指针从一台机器复制到另一台机器;它们是绝对地址(在大多数平台上)。
  3. 发送机器和接收机器可能有不同的字节顺序(例如发送机器是 x86 而接收机器是 POWER(例如 XBox),在这种情况下,您将得到的结果将是完全乱码。

我只会发送一个键/值对列表。将它们插入到接收端构建的哈希表中。

此外,请记住,在通过线路发送内容时,处理能力成本与带宽成本相比通常很小。哈希表空间效率低——它们需要大量空桶才能保持接近 O(1) 的性能。因此,即使您可以实现一种按原样通过线路发送哈希表的方法,整体性能也可能会更差。

于 2013-02-18T19:30:02.280 回答