Saya sering membaca bahwa paralelisme dan konkurensi adalah hal yang berbeda. Sangat sering para penjawab / komentator menulis bahwa keduanya adalah dua hal yang sama sekali berbeda. Namun dalam pandangan saya mereka terkait tetapi saya ingin klarifikasi tentang itu.
Sebagai contoh jika saya menggunakan CPU multi-core dan berhasil membagi perhitungan menjadi komputasi x yang lebih kecil (katakanlah menggunakan fork / join) masing-masing berjalan di utasnya sendiri, saya akan memiliki program yang sama-sama melakukan komputasi paralel (karena seharusnya pada suatu titik waktu beberapa thread akan berjalan pada beberapa core) dan menjadi bersamaan?
Sementara jika saya hanya menggunakan, katakanlah, Java dan berurusan dengan peristiwa UI dan repaints pada Event Dispatch Thread ditambah menjalankan satu-satunya utas yang saya buat sendiri, saya akan memiliki program yang bersamaan (EDT + GC thread + utas utama saya dll) tetapi tidak paralel.
Saya ingin tahu apakah saya mendapatkan ini dengan benar dan apakah paralelisme (pada sistem "tunggal tetapi multi-core") selalu menyiratkan konkurensi atau tidak?
Juga, apakah program multi-threaded berjalan pada CPU multi-core tetapi di mana thread yang berbeda melakukan perhitungan yang sama sekali berbeda dianggap menggunakan "paralelisme"?
sumber
Jawaban:
Menurut Wikipedia :
Artinya, paralelisme selalu menyiratkan konkurensi.
Tidak. Inti dari paralelisme adalah bahwa masalah besar dibagi menjadi yang lebih kecil sehingga potongan yang lebih kecil dapat diselesaikan secara bersamaan. Potongan-potongan itu saling independen (setidaknya sampai tingkat tertentu), tetapi mereka masih merupakan bagian dari masalah yang lebih besar, yang sekarang sedang diselesaikan secara paralel.
Inti dari konkurensi adalah sejumlah thread (atau proses, atau komputer) melakukan sesuatu secara bersamaan , mungkin (tetapi tidak harus) berinteraksi dalam beberapa cara. Wikipedia lagi :
sumber
Kode bisa bersamaan, tetapi tidak paralel.
Bayangkan beberapa utas berjalan pada mesin inti tunggal. Mesin single core ini hanya akan memproses satu utas pada saat itu, sehingga tidak akan ada paralelisme operasi. Tetapi untuk setiap utas, berkat cara OS menangani beberapa utas, maka setiap utas perlu mengasumsikan semua utas lainnya berjalan pada saat yang sama.
sumber
Paralelisme berarti melakukan banyak tugas secara bersamaan; di sisi lain konkurensi adalah kemampuan kernel untuk melakukan banyak tugas dengan terus-menerus beralih di antara banyak proses.
Untuk mencapai paralelisme, penting bahwa sistem harus memiliki banyak inti hanya agar paralelisme dapat dicapai secara efisien. Dan ada banyak hit pada kinerja dan banyak overhead terjadi jika paralelisme dicoba pada mesin inti tunggal.
Sebagai contoh, sistem sebelumnya hanya memiliki satu inti dan penjadwal CPU akan memberikan ilusi paralelisme dengan terus-menerus beralih di antara proses yang memungkinkan setiap proses untuk membuat kemajuan.
sumber