skim 作者说 fzf 虽然是用 GC 语言 go 写的,但是数据量上去后比自己的 rust 实现快 2-3+倍,而且占用一半的内存。还说 rust 在 share memory 上能优化的地方受限。
这是如何做到的,rust 又有哪些地方不好优化内存?纯好奇
https://github.com/skim-rs/skim/issues/317#issuecomment-652492431
fzf 源码: https://github.com/junegunn/fzf
1
mayli 21 天前 via Android
因为重写版优化不够
|
![]() |
2
wuruxu 21 天前
rust 实现还有优化空间,带 GC 的语言,明显会有额外的性能损耗
|
![]() |
3
BeiChuanAlex 21 天前
不可能,如果是这样的话,rust 版本就是没写好
|
4
DefoliationM 21 天前
不知道区别在哪,但能猜到几个原因。大量使用存在堆上的临时对象,因为所有权的原因离开作用域内存即释放,大量重复销毁和申请内存,rust 可能需要使用内存池进行优化。
|
5
w568w 21 天前 ![]() 没有人说 Rust 一定比 Go 快啊,GC 语言一定比 GC-free 慢是刻板印象,得改。准确的说法是「 GC-free 的语言,性能上限比 GC 语言高」。
也就是说,如果肯优化,Rust 一定能做到比 Go 快。 只不过 Rust 默认的编程范式不鼓励池化管理,在 I/O 和 Memory Burst 场景下,延迟比较吃亏。通俗地说就是 GC 语言鼓励「积极分配,一次性全部释放」,GC-free 鼓励「用完立刻释放」。 对了,按这个 issue 下引用的链接,你这个是 2020 年的 issue ,2022 年 skim 就已经优化到和 fzf 一样快了,且内存占用更少: https://github.com/skim-rs/skim/issues/509 |
6
CatCode 21 天前 ![]() 现在什么猫啊狗啊都写 Rust 。
遇到生命周期、所有权之类的问题一言不合就 Clone ,甚至在一些广泛使用的 crate 里面都有类似的问题。 见啥都 Clone ,Rust 开了 Release 都不一定能比纯 Python 快。 |
![]() |
7
R18 21 天前
rust 要会写,最近遇到一个项目,用 rust 写的一塌糊涂,内存占用奇高。
|
![]() |
8
suruiran 21 天前 via Android
这种软件的性能瓶颈在磁盘 IO 吧,而且都是短时间执行的 gc 也没有影响。
|
9
visper 20 天前
大概是 rust 里面 clone 太多了。而 go 里面都自动共享了。
|
10
justdoit123 20 天前
clone clone clone~
性能极致的地方,还是需要一些 unsafe 之类的操作。 |
![]() |
11
wangtian2020 20 天前
语言决定上下限,耐不住操作工水平不够
|
![]() |
12
horou 20 天前
只能说明他不会 rust
|