Doavers

Kreasikan Inspirasimu

Perbedaan Concurrency dan Parallelism di Bahasa Pemrograman Modern (Rust & Golang)

Perbedaan Concurrency dan Parallelism di Bahasa Pemrograman Modern (Rust & Golang)

Ketika membangun aplikasi berskala besar atau high-performance, dua istilah yang sering muncul adalah concurrency dan parallelism. Keduanya sering dianggap sama, padahal konsepnya berbeda. Bahasa modern seperti Golang dan Rust bahkan memiliki pendekatan yang khas dalam mengimplementasikan dua hal ini.

Artikel ini akan membahas perbedaan concurrency dan parallelism, contoh kasus, serta bagaimana implementasinya di Rust dan Golang.


🧠 1. Apa itu Concurrency?

Concurrency adalah kemampuan sebuah program untuk mengatur banyak pekerjaan (tasks) sehingga tampak berjalan secara bersamaan, meskipun sebenarnya bisa saja hanya 1 core CPU yang mengeksekusinya secara bergantian (interleaving).

Tujuan utama concurrency: mengelola banyak pekerjaan sekaligus, bukan menjalankannya secara bersamaan.

Contoh sederhana:

  • Server HTTP menangani banyak request secara simultan.
  • Chat app yang tetap responsif meskipun sedang menulis data ke disk.
  • Download manager yang mengatur banyak antrian unduhan.

Cara kerja:

  • Memecah pekerjaan menjadi tasks.
  • Scheduler men-switch eksekusi antar tasks dengan cepat.
  • Tidak selalu butuh banyak core CPU.

2. Apa itu Parallelism?

Parallelism adalah kemampuan program untuk menjalankan banyak pekerjaan secara benar-benar bersamaan, memanfaatkan multi-core CPU.

Tujuan utama parallelism: meningkatkan kecepatan eksekusi komputasi berat.

Contoh sederhana:

  • Machine learning training memecah perhitungan ke banyak core.
  • Image processing dengan SIMD atau multi-thread CPU.
  • Kalkulasi berat seperti Fibonacci, Monte Carlo Simulation.

Cara kerja:

  • Menjalankan multiple tasks at the same time.
  • Membutuhkan multi-core CPU.

🎯 3. Perbedaan Inti (Singkat & Jelas)

AspekConcurrencyParallelism
FokusPengaturan banyak tugasEksekusi simultan
Butuh multi-core?TidakYa
Contoh umumWeb server, I/O boundCPU-bound tasks
TujuanResponsivenessPerformance

Sederhananya:
Concurrency ≠ Paralel
Tapi concurrency bisa berjalan paralel, jika hardware dan schedulernya mendukung.


🦀 4. Concurrency & Parallelism di Rust

Rust menyediakan dua hal utama:

a. Concurrency (Rust async / tokio / async-std)

Rust memakai konsep async/await yang fokus pada cooperative multitasking.

Contoh:

async fn run() {
    let a = fetch_data();
    let b = compute_something();

    tokio::join!(a, b);
}

Rust async ideal untuk:

  • Web server
  • Network programming
  • I/O heavy operations

Async Rust tidak otomatis paralel; ia tetap concurrency saja kecuali dijalankan di thread-pool.

b. Parallelism (Rust threads / rayon / multi-threading)

Utilizing CPU cores:

use rayon::prelude::*;

fn main() {
    let numbers = (1..10_000_000).collect::<Vec<u32>>();
    let sum: u32 = numbers.par_iter().sum();

    println!("{}", sum);
}

Rayon memecah pekerjaan ke banyak core → ideal untuk CPU-bound jobs.

Rust unggul karena:

  • Ownership system mencegah data races
  • Thread safety dijamin oleh compiler (Send, Sync)

🟦 5. Concurrency & Parallelism di Golang

Golang terkenal dengan model goroutine yang ringan.

a. Concurrency (goroutine + channel)

go func() {
    fmt.Println("Task A")
}()

go func() {
    fmt.Println("Task B")
}()

Goroutine menggunakan M:N scheduler, sangat efisien untuk concurrency tinggi.

b. Parallelism (GOMAXPROCS / multi-core execution)

Eksekusi goroutine bisa paralel jika kita memakai CPU multiple core:

runtime.GOMAXPROCS(runtime.NumCPU())

Karakteristik Go:

  • Mudah dipakai
  • Cocok untuk web server, microservices
  • Scheduler smart untuk load balancing antar core

🔥 6. Kapan Harus Memakai Concurrency vs Parallelism?

Gunakan Concurrency ketika:

  • Banyak pekerjaan I/O (network, file)
  • Ingin program responsif
  • Membutuhkan banyak tasks tetapi tak perlu cepat selesai semua

Gunakan Parallelism ketika:

  • Melakukan komputasi berat (CPU-bound)
  • Perhitungan statistik, ML, rendering
  • Perlu memaksimalkan seluruh core CPU

Kombinasi Keduanya:

Banyak aplikasi real-world memakai dua-duanya, misal:

  • Web server yang concurrency untuk request handling
  • Parallelism untuk batch processing CPU-heavy

🧩 7. Kesimpulan

Concurrency adalah tentang mengatur banyak tugas.
Parallelism adalah menjalankan banyak tugas secara bersamaan.

Rust dan Go sama-sama kuat:

BahasaConcurrencyParallelism
RustSafety tinggi, async cepat, tanpa GCThreading aman & cepat, rayon
GolangMudah, goroutine ringan, ideal untuk I/OParalel otomatis dengan GOMAXPROCS

Kedua bahasa modern ini menunjukkan bagaimana system-level programming berevolusi untuk memaksimalkan performa dan efisiensi.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *