我用的是东京的UdpCodec trait:
pub trait UdpCodec {
type In;
type Out;
fn decode(&mut self, src: &SocketAddr, buf: &[u8]) -> Result<Self::In>;
fn encode(&mut self, msg: Self::Out, buf: &mut Vec<u8>) -> SocketAddr;
}
我的关联类型In
is a (SocketAddr, Vec<Metric>)
. Metric
定义为:
#[derive(Debug, PartialEq)]
pub struct Metric {
pub name: String,
pub value: f64,
pub metric_type: MetricType,
pub sample_rate: Option<f64>,
}
我使用拥有的字符串来避免关联类型的生命周期限制。不过我也这样做HashMap
使用这些指标名称进行查找和插入,这涉及大量克隆,因为我借用了其他函数中的指标。
如何更好地在其中存储字符串Metric
类型以避免许多低效的克隆?使用Cow
类型曾在我的脑海中闪过,但它显然也与我一生有关联。
扩展@Josh的建议,我建议使用实习。
根据任务的内存或 CPU 密集程度,在以下选项之间进行选择:
- 双哈希映射:
ID
String
, 组件之间共享
- 单个哈希映射:
String
-> Rc<str>
如果你能负担得起后者,我绝对建议你这样做。另请注意,您可能会弃牌MetricType
内Rc
: Rc<(MetricType, str)>
.
那你还需要打电话clone
左和右,但每个都只是一个廉价的非原子增量操作......并且转移到多线程就像交换一样简单Arc
for Rc
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)