728x90
반응형
for문과 .stream()사이에 시간차이가 존재한다.
JAVA에서는 stream문장이 시간이 더 오래걸리는 것으로 확인되었으나, Rust에서도 과연 stream 문장이 더 속도가 느릴까? 라는 궁금증이 생겨 포스팅을 하게 되었습니다.
https://doc.rust-lang.org/book/ch13-04-performance.html
다음 사이트의 내용을 보면 공식 문서에서도 해당 내용에 대하여 분석을 하고 있는 것으로 보아, 어느정도 차이점이 발생하고 있는 것으로 보입니다.
해당 블로그에서 측정하기 위한 코드는 다음과 같습니다.
- 반복문
fn main() { let start = Instant::now(); let mut v : Vec<i64> = Vec::new(); for i in 0..100000000 { v.push(i); } let duration = start.elapsed(); println!("시간 : {:?} milliseconds", duration.as_millis()); }
평균 : 1095ms
- 스트림
```rust
fn main() {
let start = Instant::now();
let mut v = (0..100000000).map(|i| i).collect::<Vec<i64>>();
let duration = start.elapsed();
println!("시간 : {:?} milliseconds", duration.as_millis());
}
평균 : 940.5ms
물론 stream은 vector에 들어갈 값들의 개수를 정확이 알고 있어 capacity를 증가하지 않아도 되어서 for문보다 속도가 빠를 수 있습니다.
그래서 gpt에 물어보니, .map을 통하여 값을 받는 경우에는 iterator chain을 최적으로 반환하여 no-op가 생략되거나, loop-unrolling 등으로 최적화된다고 합니다.
또한 .collect()가 내부적으로 unsafe 루프를 사용하여 Vec에 값들을 써 넣어 속도가 더 빠르다고 합니다.
for문에서 with_capacity로 vector를 선언하는 경우, stream과 속도가 거의 비슷하게 나오도록 할 수 있습니다.
728x90
반응형
'Rust > 각종 테스트' 카테고리의 다른 글
| Java vs java to call rust (1) | 2025.12.09 |
|---|---|
| Rust axum VS Java Spring boot 속도 테스트 (2) | 2025.04.04 |
댓글