Erlang 中 gen_fsm:start/3 的独特原子

发布于 2024-11-04 18:00:22 字数 324 浏览 4 评论 0原文

我目前正在进行一个制作游戏服务器的项目。每个玩家都应该有一个自己的具有 gen_fsm 行为的进程。要使用 start/3 启动 gen_fsm,我们需要一个唯一的原子,目前我们使用 make_ref() 并找到了一种方法将此 ref 变成具有 ref_to_list/1 的原子。但根据 这篇文章 不建议这样做,我同意他。

你会如何解决这个问题?当我们使用本地选项启动 gen_fsm 时,我们需要一个原子来识别它。

I'm currently in a project making a gameserver. Every player is supposed have an own process with gen_fsm behavior. To start gen_fsm with start/3 we need a unique atom, currently we use make_ref() and have found a way to make this ref into an atom with ref_to_list/1. But according to this post it is not recommended and I agree with him.

How would you solve this problem? When we start a gen_fsm with the local option we need an atom to identify it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮生面具三千个 2024-11-11 18:00:22

如果您使用 gen_fsm:start/3 ,您唯一需要的原子就是回调模块名称。这样,您只需跟踪 PID(进程 ID),该 PID 将自动成为唯一的。

如果您稍后需要访问 gen_fsm 进程,请将 PID 保存在某种映射表中或为该进程命名(就像您所做的那样)。

If you use gen_fsm:start/3 the only atom you need is the callback module name. That way you only have to keep track of a PID (process ID) which will automatically be unique.

If you need to reach the gen_fsm process later, either save the PID in some sort of mapping table or name the process (as you did).

ㄖ落Θ余辉 2024-11-11 18:00:22

也许我错过了一些东西,但听起来你最好的做法是不指定 local 选项,即不给 gen_fsm 进程命名。

值得注意的是,实例的唯一原子的数量有限制 erlang vm的可以使用。因此,生成大量随机原子可能是一个坏主意。

Maybe I'm missing something, but it sounds like your best course of action would be to not specify the local option, i.e. to not give the gen_fsm process a name.

It's worth noting that there is a limit to the number of unique atoms that an instance of the erlang vm can use. So generating lots of random atoms is probably a bad idea.

黄昏下泛黄的笔记 2024-11-11 18:00:22

您应该看到 gproc (https://github.com/esl/gproc) 来创建进程注册表,以将某些 erlang 术语与进程的 pid() 相关联。用唯一的原子注册每个启动的 gen_fsm 进程并不是一个好主意。

You should see gproc (https://github.com/esl/gproc) to create process registry for associating some erlang term with pid() of process. It is not good idea to register each started gen_fsm process with unique atom.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文