Jika membahas concurrency, tentunya terkait dengan parallelism. Mungkin ada yang bingung mengenai perbedaan antara keduanya. Bagaimanapun, concurrency dan parallelism mempunyai arti yang mirip, yaitu 2 (dua) atau lebih proses yang berjalan pada satu waktu. Namun penting diketahui bahwa concurrency bukanlah parallelism.
Baik concurrency maupun parallelism, biasanya melibatkan pembuatan thread-thread untuk menjalankan tugas. Thread-thread tersebut bisa dijalankan di satu atau lebih core. Lalu apakah perbedaan dari keduanya?
Concurrency terjadi apabila terdapat 2 (dua) atau lebih proses yang tumpang tindih dalam satu waktu. Ini bisa terjadi jika ada 2 (dua) atau lebih thread yang sedang aktif. Dan jika thread tersebut dijalankan oleh komputer yang hanya memiliki 1 (satu) core, semua thread tidak akan dijalankan secara paralel. Concurrency memungkinkan sebuah komputer yang hanya memiliki 1 (satu) core tampak seakan mengerjakan banyak tugas sekaligus. Padahal sebenarnya tugas-tugas tersebut dilakukan secara bergantian.
Sedangkan parallelism terjadi ketika 2 (dua) proses dijalankan pada titik waktu yang sama persis. Parallelism bisa dilakukan jika terdapat 2 (dua) atau lebih thread dan komputer juga memiliki 2 (dua) core atau lebih. Sehingga setiap core dapat menjalankan perintah dari masing-masing thread secara bersamaan.
Perhatikan beberapa ilustrasi berikut agar Anda lebih memahami perbedaan antara concurrency dan parallelism.
Bayangkan Anda di warung kopi dan melihat antrian seperti yang digambarkan pada ilustrasi di atas. Pelanggan dengan masing-masing pesanannya pasti senang jika sang barista bisa melayani dengan tepat dan cepat. Jika pada warung kopi tersebut hanya terdapat seorang barista, otomatis sang barista harus melakukan cara untuk melayani semua pelanggan sekaligus. Pada situasi seperti inilah concurrency dibutuhkan.
Karena hanya terdapat seorang barista, maka barista tersebut akan memproses lebih dari satu pesanan secara bersamaan. Hal ini sangat mungkin terjadi karena pembuatan kopi membutuhkan beberapa langkah, dan masing-masing langkah memakan waktu tersendiri. Misalnya menyiapkan air panas, menakar kopi, menyiapkan mesin espresso, dll. Barista akan membagi langkah-langkah tersebut sehingga seolah-olah ia bisa mengerjakan pesanan secara bersamaan.
Berbeda jika sang barista punya teman kerja untuk berbagi tugas. Pada situasi ini parallelism bisa dilakukan. Barista 1 hanya akan melayani beberapa pelanggan, dan sisanya akan dilayani oleh barista 2.
Karena kedua barista tersebut telah berbagi tugas, maka mereka akan bertindak secara paralel sehubungan dengan tugas yang lebih besar dalam melayani pelanggan. Bagaimanapun, selama jumlah barista belum sama dengan jumlah pelanggan, concurrency masih tetap diperlukan pada masing-masing barista tersebut. Artinya, parallelism dapat menimbulkan concurrency, tetapi concurrency bisa terjadi tanpa parallelism.