Konkurensi dan Paralelisme : Apa perbedaan dari keduanya?

Pemrogramman

Ada satu ilustrasi menarik yang pernah saya dengar digunakan untuk membedakan konkurensi dan paralelisme.

Konkurensi ibarat Anda berbicara sambil minum—secara kasat mata Anda melakukan dua hal tersebut bersamaan, namun pada satu waktu Anda hanya bisa melakukan satu hal saja, bicara atau minum. Kedua hal itu Anda lakukan secara bergantian. (Catatan: saya menyarankan Anda tidak mencoba melakukan kedua hal tersebut sekaligus.)

Paralelisme, sementara itu, lebih cocok dianalogikan dengan kemampuan Anda berbicara sambil berjalan. Anda benar-benar dapat melakukan keduanya secara bersamaan dan independen.

Berbicara di dunia komputer, pembahasan konkurensi dan paralelisme umumnya terkait banyaknya core dari prosesor (CPU).

Konkurensi memungkinkan sebuah komputer yang hanya memiliki satu coretampak seakan ia mengerjakan banyak tugas sekaligus (multitasking). Padahal, tugas-tugas tersebut dilakukan secara bergantian—layaknya bicara dan minum—namun pergantian tersebut sangat cepat sehingga seringkali tidak kita sadari.

Sementara itu, paralelisme adalah multitasking yang hakiki; ia dimungkinkan dengan adanya prosesor dengan core lebih dari satu. Dalam paralelisme, tugas-tugas tersebut dilakukan secara bersamaan pada core yang berbeda.

Model komputasi konkuren dan paralel pada program biasanya melibatkan pembuatan thread-thread untuk menjalankan tugas. Thread-thread tersebut bisa dijalankan di satu atau lebih core.

Karena tugas-tugas pada model konkuren dilakukan secara bergantian, terdapat sebuah ongkos ketika terjadi peralihan konteks (context switching), yaitu waktu yang dibutuhkan untuk berganti dari satu tugas ke tugas lain. Ongkos ini tidak ada dalam komputasi paralel.

Kesimpulan yang bisa diambil adalah: paralelisme sudah pasti konkuren, tapi konkurensi belum tentu paralel.

Lalu, mana yang lebih baik, konkurensi atau paralelisme?

Seperti semua pertanyaan yang menarik di dunia ilmu komputer, jawabannya adalah: tergantung. Beberapa masalah cocok untuk dilakukan secara konkuren, beberapa secara paralel, dan ada masalah-masalah di mana model komputasi konkuren sudah cukup baik.

Misalnya, pada dunia JavaScript (Node.js) yang hanya mengandalkan satu thread, komputasi konkuren dimungkinkan dengan menggunakan mekanisme event loop. Agar program berjalan efisien, pemrogram harus memastikan semua operasi dilakukan secara non-blocking. Solusi tersebut bahkan cukup untuk mengatasi traffic dengan skala besar, seperti yang dilakukan di perusahaan PayPal dan LinkedIn.

Umumnya, komputasi konkuren cocok dilakukan pada masalah-masalah yang sifatnya dapat diinterupsi atau kebanyakan menunggu. Akses ke database, apalagi yang berada pada jaringan yang berbeda, akan memakan waktu; sementara menunggu, aplikasi seharusnya bisa memanfaatkan waktu tersebut untuk melakukan hal lain.

Sementara itu, komputasi paralel cocok digunakan pada komputasi-komputasi berat yang CPU-bound. Jika tugas program Anda adalah memproses angka dalam jumlah besar, Anda dapat meng-offload tugas tersebut ke core-core yang tersedia pada mesin agar program Anda dapat berjalan secara lebih efisien.

Pada dasarnya, seringkali pada suatu mesin dengan prosesor 4 core melakukan banyak tugas baik secara konkuren dan paralel. Seperti yang kita tahu, tidak seperti manusia, komputer kita sangat andal dalam multitasking.

Sejauh ini kita baru berbicara paralelisme dalam satu mesin komputer. Selain dengan adanya lebih dari satu core prosesor, paralelisme juga dimungkinkan dengan adanya lebih dari satu mesin. Ini yang terjadi misalnya pada cluster-cluster MapReduce seperti Hadoop. Pada kasus ini, selain paralel, komputasi tersebut juga disebut komputasi terdistribusi.

sumber: https://id.quora.com


Artikel Terkait

;