본문 바로가기
Rust/각종 테스트

Rust에서의 반복문 vs stream

by lms0806 2025. 7. 27.
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

댓글