Timer 二郎:有很多定时器可以吗?

Timer 二郎:有很多定时器可以吗?,timer,erlang,match,Timer,Erlang,Match,我有一个gen_服务器进程,该进程维护一个池,对于每个传入请求,我需要检查该池,以查看是否存在与此传入请求匹配的池,如果存在,则将匹配的池从池中删除,并对两个请求进行回复;如果没有,则将新请求放入池中供以后检查 业务逻辑要求,如果请求R在池中停留T秒而未匹配,我需要回复R说“我无法为您找到匹配项” 理想情况下,我希望使用计时器来实现这一点,特别是对于每个传入的请求,如果没有匹配项,则像以前一样将其放入池中,但如果时间到了,则启动计时器告诉gen_服务器将其删除,当然,如果稍后匹配,则应取消计时器

我有一个gen_服务器进程,该进程维护一个池,对于每个传入请求,我需要检查该池,以查看是否存在与此传入请求匹配的池,如果存在,则将匹配的池从池中删除,并对两个请求进行回复;如果没有,则将新请求放入池中供以后检查

业务逻辑要求,如果请求
R
在池中停留
T
秒而未匹配,我需要回复
R
说“我无法为您找到匹配项”

理想情况下,我希望使用计时器来实现这一点,特别是对于每个传入的请求,如果没有匹配项,则像以前一样将其放入池中,但如果时间到了,则启动计时器告诉gen_服务器将其删除,当然,如果稍后匹配,则应取消计时器


我担心的是,如果池中有很多不匹配的请求,那么会有很多正在运行的计时器,这(太多的计时器)会成为问题吗?

在计时器的实现方面做了很大的改进

除了API更改和时间扭曲模式之外,还有很多
在时间方面的可扩展性和性能改进
已在运行时系统内部进行管理。
此类改进的示例是特定于调度器的计时器
控制盘,特定于调度器的BIF定时器管理,并行
带参数系统上单调时间和系统时间的检索
不带bug的原语。

特定于调度器的计时器控制盘正是您的场景中感兴趣的部分。我怀疑您能否在Erlang或任何其他语言/环境中找到性能更好的问题解决方案。因此,当您使用R18或更新版本时,您的解决方案应该是可以的。

并非所有计时器都以相同的方式工作,我知道
计时器:开始
通常是可以避免的,并且会带来性能损失,而在数千个进程中使用
erlang:send_after
似乎很常见。@Reith我几天前在CodeMesh使用
erlang:send_after
,Joe Armstrong演示了一个生成成千上万个进程的示例,每个进程在特定时间睡眠,然后播放一个MIDI音符。工作得很好!:-)谢谢,海内克-皮奇-维乔迪@RichardC我自己也开始测试10K计时器,它甚至不闪烁。