“时间通行证”模块

时间:2012-07-04 20:54:23

标签: erlang

我正在尝试创建一个以不规则间隔收集数据的通用模块。一旦新数据到达,数据就从左端到达。这可能是每秒100次。

在右端,我希望能够“插入”n个侦听器,每个侦听器都有自己的常规间隔。为了简化,我们假设所有的间隔都是每秒一次。

每个侦听器都注册一个可能是异步的回调函数。

我的问题是,如果回调函数是同步的,我的“临时通行证”可能会挂起。解决这个问题的最佳方法是什么?我应该生成一个进程,其纯粹的目的是传递数据并在回调挂起时支付价格吗?

         +-------------+ Data Out 1
=======> |Temporal Pass| ==========>
Data In  +-------------+ \\ Data Out 2
                          ++=======>
                           \\ Data Out n
                            ++=======>

1 个答案:

答案 0 :(得分:4)

为消息生成一个新进程,否则进程将等到同步调用完成。这正是流程模型要解决的问题,我没有看到任何其他方法。

产卵过程并不昂贵,但也不完全免费。通过仅生成同步调用的新进程,您可以获得较小的性能提升。这将需要某种方式将每个回调标记为同步或异步。