cam*_*art 6 concurrency cro raku
我在rakulang sub reddit 上问了这个问题,并被建议在这里发帖:
我在很多工作中一直退回到 Perl 5,所以我可以“完成它”,因为我对 Perl 5 更加熟悉。
但是,我需要构建一些可以订阅多个 MQTT 主题(在概念上类似于 websocket 订阅)和处理数据的东西,并将大量这些数据保留为内部状态。一个并发项目。所以我认为这是一个让自己沉浸在乐曲中的好机会:)
到目前为止,我知道我需要创建一个供应/给定/设置时,但我不完全确定我将如何处理通过每个主题收到的每个数据流的状态。我的 reddit 帖子的回复建议了 Cro,我认为这非常适合该法案。但仍有一些实现细节我不清楚。
例如,消息有效负载到达 topic foo
,我想将该有效负载中的数据添加到现有数组(我的内部状态)。
但是这种对主题的订阅将针对“未确定”数量的主题进行,并将在运行时进行调整。所以不可能有一个硬编码的数组来存储和管理这些数据@foo
例如,在非并发世界中,我可以使用与我的主题名称匹配的键创建一个散列(关联数组)%data<foo>
,并将该数组存储在那里。
然而,在并发的世界里,我需要一个互斥问题的答案。如果散列的每个成员都由不同的线程同时修改其数据,那么我认为整个散列将需要锁定。
这至少有可能导致死锁或性能不佳(我预计每秒会有数百条消息,跨多个主题订阅)。
也许我可以基于主题名称“动态”创建一个变量(或者更好的是对象),因此每个数据数组都有一个单独的内存地址。但是,我不确定如何做到这一点,或者确实在这种情况下这是否是“最佳”方法。
总之,问题 1:为此目的动态创建对象或变量是一种声音模式吗?问题 2:是否有一种我根本不知道的设计方法更合适?
因此,任何具体的建议将不胜感激。我觉得这是一个“我不知道我不知道”类型的问题!
谢谢!
归档时间: |
|
查看次数: |
139 次 |
最近记录: |