gpt4 book ai didi

c++ - 如何在咖啡馆找到 Actor

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:48 24 4
gpt4 key购买 nike

我开始尝试使用 caf 并用它来表示图形。
由于此图是单向的,我可以创建我需要的 Actor 并相应地链接它们,但现在我想找到一个由其名称标识的特定 Actor 。

class node_actor : public event_based_actor{
std::string m_name;
...
};

int main(){
auto entry_actor = spawn<node_actor>();
// node_actor will spawn other actors with names
// like this: node_actor will spawn node1
// node1 will spwan node2
// node2 will spwan node3 and so on

// now I want to send a message to node2
scoped_actor self;
self->send(n2, 42});
...
}

找到 n2 的最佳方法是什么?
这可以由一个组来处理,广播消息吗?例如像这样:

{
auto g = group::get("local", "Node events");
auto entry_actor = spawn_in_group<node_actor>(g);
// change all nodes to call spawn_in_group

scoped_actor self;
self->send(g, name, 42})
}

如果是这样的话,开销会不会很大,因为必须检查所有节点是否与消息匹配?
或者还有其他我在文档中没有找到的方法吗?

最佳答案

我认为该组是个好主意,因为它也可以分布式工作。您可以通过向组宣布每个生成的 actor 而不是广播消息来获得更好的可扩展性。

每个 Actor 都需要一个 name <-> actor然后映射将订阅该组(在您实际生成节点之前)。每当您生成一个新节点时,您将其名称连同其句柄发送到该组,每个监听器将此映射添加到其本地状态(或者如果它只对几个选定的名称感兴趣,则忽略该消息)。

如果您有很多 actor 需要名称映射并且您不想多次复制映射,您也可以使用单个 actor 而不是存储映射并可以被其他人查询的组每当他们需要解析名称时。

您的第三个选择是使用 actor 注册表,但这只能在本地工作,并且只有在您可以使用 atom 时才有效。名字。如果这符合您的用例,那么您可以通过 detail::singletons::get_actor_registry()->put_named(key, value); 注册新的参与者。并通过 detail::singletons::get_actor_registry()->get_named(key); 检索它们.我通常不推荐 detail 中的功能命名空间,但此特定功能将在 0.15 中进入公共(public) API。顺便说一下,你可以创建一个 atom_value动态地,但您当然不能超过 10 个字符,并且只能使用字母数字字符。

希望对您有所帮助。

关于c++ - 如何在咖啡馆找到 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36528349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com