我正在尝试分析看起来像的代码
let x = some_map.par_iter().
map|(key, value_collection)| {
if some_test(key) {
let frame = MyFrame::new(value_collection.len())
for value in value_collection {
frame.update(value)
}
return Some((key.to_owned(), Arc::new(frame))
}
None
}).
filter(|o| o.is_some()).
map(|o| o.unwrap()).
collect();
par_iter
来自人造丝。
这段代码运行缓慢,所以我试图通过类似的命令使用 cargo-flamegraph 对其进行分析
sudo flamegraph --open my_app
当我更改par_iter
为 时iter
,我在火焰图中看到合理的东西,表明这Frame::update
需要一些时间,并且各种HashMap
方法都需要一些时间。
如果我使用par_iter
的是充满人造丝的调用,但看起来它实际上并没有从人造丝创建的线程中给我任何结果。人造丝消费者和助手和桥梁有很多条目,但我的代码没有出现。我查看了 flamegraph.svg 并Frame:
没有出现。(顺序版本有Frame::update
。)
我需要做些什么来让火焰图也分析线程吗?