Singkatnya, kode ini bertujuan untuk menghitung total penjumlahan semua angka dari 1 sampai 1 triliun (yaitu, 1 + 2 + 3 + ... + 1.000.000.000.000).
Karena ini adalah perhitungan yang sangat besar dan akan memakan waktu sangat lama jika dilakukan satu per satu, kode ini menggunakan pemrosesan paralel (memanfaatkan semua inti/core CPU) untuk mempercepatnya secara drastis.
Selain itu, kode ini juga:
- Menampilkan progress bar yang informatif di terminal.
- Mengukur dan menampilkan total waktu yang dibutuhkan untuk perhitungan.
Kode ini bekerja dengan strategi "pecah dan taklukkan" (divide and conquer). Pekerjaan raksasa (menghitung 1 triliun angka) dipecah menjadi bagian-bagian kecil (chunks), lalu setiap bagian dikerjakan secara bersamaan (paralel).
Berikut adalah rincian langkah kerjanya:
Kode ini mengimpor tiga crate (library) eksternal:
use rayon::prelude::*: Ini adalah crate utama yang memungkinkan pemrosesan paralel dengan sangat mudah.use indicatif::{ProgressBar, ProgressStyle}: Ini digunakan untuk membuat dan mengatur tampilan progress bar.use std::time::Instant: Ini adalah bagian dari library standar Rust untuk mengukur waktu.
Di dalam fungsi main, hal pertama yang dilakukan adalah menentukan ukuran pekerjaan:
let n: u128 = 1_000_000_000_000;: Menetapkan angka target (1 triliun). Tipeu128(128-bit integer) digunakan karenau64(64-bit) tidak akan cukup untuk menampung hasil penjumlahannya.let chunk_size: u128 = 10_000_000_000;: Menentukan bahwa 1 "tugas" adalah menghitung 10 miliar angka.let num_chunks = (n + chunk_size - 1) / chunk_size;: Menghitung berapa banyak chunk yang dibutuhkan. Dalam kasus ini, 1 Triliun / 10 Miliar = 100 chunks.
let pb = ProgressBar::new(num_chunks as u64);: Membuat progress bar baru dariindicatifdengan total langkah sebanyaknum_chunks(100).pb.set_style(...): Mengatur tampilan progress bar agar terlihat bagus (menampilkan waktu, bar, dan jumlah chunk).
Di sinilah keajaiban rayon terjadi:
let sum: u128 = (0..num_chunks): Ini membuat iterator (penghitung) dari 0 hingga 99 (total 100 chunk)..into_par_iter(): Ini adalah perintah kuncinya.rayonmengubah iterator standar tadi menjadi iterator paralel. Ini berarti loop berikutnya akan dijalankan secara bersamaan di thread dan core CPU yang berbeda..map(|chunk_idx| { ... }): Blok kode ini akan dieksekusi untuk setiapchunk_idx(0, 1, 2, ..., 99), kemungkinan besar di waktu yang bersamaan.let start_i = ...danlet end_i = ...: Menghitung angka awal dan akhir untuk chunk ini.- Core 1 mungkin mengambil
chunk_idx = 0, menghitungstart_i = 1danend_i = 10_000_000_000. - Core 2 mungkin mengambil
chunk_idx = 1, menghitungstart_i = 10_000_000_001danend_i = 20_000_000_000. - Core 3 mungkin mengambil
chunk_idx = 2, ... dan seterusnya.
- Core 1 mungkin mengambil
for i in start_i..=end_i { chunk_sum += i; }: Ini adalah pekerjaan utamanya. Setiap core menjumlahkan angka-angka hanya di dalam jangkauan chunk-nya sendiri.pb.inc(1);: Setelah satu chunk selesai dihitung, progress bar akan bertambah 1.chunk_sum: Mengembalikan hasil penjumlahan parsial dari chunk tersebut.
.sum(): Setelah semua chunk selesai diproses secara paralel, metode.sum()darirayonakan mengambil semua hasilchunk_sum(dari semua core) dan menjumlahkan mereka semua menjadi satu nilai total akhir.pb.finish_with_message(...): Menghentikan progress bar.println!(...): Mencetak hasil total penjumlahan dan total waktu eksekusi ke layar.
Pengujian dilakukan pada 2 komputer berbeda keduanya menggunakan 100% cpu core mereka.
Jika ingin mencoba silahkan clone repository lalu compile rust dengan optimasi cargo build --release atau download file binary dibawah ini dan jalankan di terminal.



