Paralelisme menyiratkan konkurensi tetapi tidak sebaliknya?

15

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"?

Cedric Martin
sumber

Jawaban:

13

Menurut Wikipedia :

Komputasi paralel adalah suatu bentuk komputasi di mana banyak perhitungan dilakukan secara bersamaan, beroperasi dengan prinsip bahwa masalah besar seringkali dapat dibagi menjadi yang lebih kecil, yang kemudian diselesaikan secara bersamaan ("secara paralel").

Artinya, paralelisme selalu menyiratkan konkurensi.

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"?

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 :

Concurrency adalah properti dari sistem di mana beberapa komputasi dieksekusi secara bersamaan, dan berpotensi berinteraksi satu sama lain.

Joonas Pulakka
sumber
4
Pos yang bagus. Paralelisme adalah bagian dari Concurrency.
3
Maaf, tapi jawaban ini salah. Anda pasti dapat memiliki paralelisme tanpa konkurensi (misalnya paralelisme tingkat bit) dan pada kenyataannya, keduanya adalah konsep yang berbeda. Concurrency adalah tentang menyusun unit eksekusi independen sedangkan paralelisme adalah tentang eksekusi simultan dari komputasi yang berpotensi terkait.
Kai Sellgren
@ KaiSellgren: Silakan mengutip beberapa sumber untuk mendukung pernyataan Anda.
Joonas Pulakka
Wikiquote pertama benar-benar salah. Untungnya itu diperbaiki beberapa waktu lalu dan sekarang menyatakan dengan benar bahwa paralelisme tidak bergantung pada konkurensi.
Kai Sellgren
Memang, itulah yang dikatakan entri wiki saat ini ( dimungkinkan untuk memiliki paralelisme tanpa konkurensi (seperti paralelisme bit-level) ). Tapi saya tidak mengerti maksud itu sama sekali; bukankah paralelisme tingkat bit adalah hal yang paling bersamaan yang dapat dibayangkan - lebih banyak operasi dilakukan dengan instruksi yang lebih sedikit, maka bukankah beberapa dari operasi tersebut dilakukan dalam instruksi yang sama, yaitu secara bersamaan, yaitu bersamaan?
Joonas Pulakka
3

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.

Euforia
sumber
0

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.

pengguna196279
sumber