Pertanyaan Apa perbedaan antara konkurensi dan paralelisme?


Apa perbedaan antara konkurensi dan paralelisme?

Contoh-contoh dihargai.


762
2018-06-26 17:18


asal


Jawaban:


Concurrency adalah ketika dua atau lebih tugas dapat memulai, menjalankan, dan menyelesaikan dalam periode waktu yang tumpang tindih. Itu tidak berarti mereka berdua akan berlari pada saat yang sama. Sebagai contoh, multitasking pada mesin single-core.

Paralelisme adalah saat tugas secara harfiah jalankan pada saat yang sama, misalnya, pada prosesor multicore.


Mengutip Sun's Panduan Pemrograman Multithreaded:

  • Concurrency: Suatu kondisi yang ada ketika setidaknya dua utas membuat kemajuan. Bentuk paralelisme yang lebih umum yang dapat mencakup pengirisan waktu sebagai bentuk paralelisme virtual.

  • Paralelisme: Kondisi yang muncul saat setidaknya dua utas dieksekusi secara bersamaan.


925
2018-06-26 17:24



Mengapa Ada Kebingungan

Kebingungan ada karena arti kamus dari kedua kata ini hampir sama:

  • Bersamaan: ada, terjadi, atau dilakukan pada saat yang bersamaan (dictionary.com)
  • Paralel: sangat mirip dan sering terjadi pada saat yang bersamaan (merriam webster).

Namun cara mereka digunakan dalam ilmu komputer dan pemrograman sangat berbeda. Berikut adalah interpretasi saya:

  • Concurrency: Interupsi
  • Paralelisme: Independensi

Jadi apa yang saya maksud dengan definisi di atas?

Saya akan mengklarifikasi dengan analogi dunia nyata. Katakanlah Anda harus menyelesaikan 2 tugas yang sangat penting dalam satu hari:

  1. Dapatkan paspor
  2. Dapatkan presentasi selesai

Sekarang, masalahnya adalah tugas-1 mengharuskan Anda pergi ke kantor pemerintah yang sangat birokratis yang membuat Anda menunggu selama 4 jam dalam antrean untuk mendapatkan paspor Anda. Sementara itu, tugas-2 dibutuhkan oleh kantor Anda, dan itu adalah tugas yang sangat penting. Keduanya harus selesai pada hari tertentu.

Kasus 1: Eksekusi Berurutan

Biasanya, Anda akan pergi ke kantor paspor selama 2 jam, menunggu dalam antrean selama 4 jam, menyelesaikan tugas, berkendara kembali dua jam, pulang, tinggal jauh 5 jam lagi dan menyelesaikan presentasi.

Kasus 2: Eksekusi Serentak

Tapi kamu pintar. Anda berencana ke depan. Anda membawa laptop bersama Anda, dan sambil menunggu di antrean, Anda mulai mengerjakan presentasi Anda. Dengan cara ini, begitu Anda kembali ke rumah, Anda hanya perlu bekerja 1 jam ekstra, bukan 5 jam.

Dalam hal ini, kedua tugas itu dilakukan oleh Anda, hanya dalam beberapa bagian. Anda menginterupsi tugas paspor sambil menunggu di antrean dan mengerjakan presentasi. Ketika nomor Anda dipanggil, Anda menginterupsi tugas presentasi dan beralih ke tugas paspor. Penghematan waktu pada dasarnya dimungkinkan karena interupsi dari kedua tugas.

Concurrency, IMO, harus diambil sebagai "isolasi" dalam properti ACID dari database. Dua transaksi database memenuhi persyaratan isolasi jika Anda melakukan sub-transaksi dalam setiap cara yang disisipkan dan hasil akhir sama seperti jika dua tugas dilakukan secara serial. Ingat, bahwa untuk paspor dan tugas presentasi, Anda adalah algojo tunggal.

Kasus 3: Eksekusi Paralel

Sekarang, karena Anda benar-benar pintar, Anda jelas lebih tinggi, dan Anda sudah mendapatkan asisten. Jadi, sebelum Anda berangkat untuk memulai tugas paspor, Anda meneleponnya dan katakan padanya untuk menyiapkan draf presentasi yang pertama. Anda menghabiskan seluruh hari Anda dan menyelesaikan tugas paspor, kembali dan melihat surat Anda, dan Anda menemukan draft presentasi. Dia telah melakukan pekerjaan yang cukup solid dan dengan beberapa pengeditan dalam 2 jam lagi, Anda menyelesaikannya.

Sejak saat itu, asisten Anda secerdas Anda, ia mampu mengatasinya secara mandiri, tanpa perlu terus-menerus meminta Anda untuk klarifikasi. Dengan demikian, karena independensi tugas, mereka dilakukan pada saat yang bersamaan oleh dua algojo berbeda.

Masih dengan saya? Baik...

Kasus 4: Bersamaan tetapi Tidak Paralel

Ingat tugas paspor Anda, di mana Anda harus menunggu di telepon? Sejak itu anda paspor, asisten Anda tidak bisa mengantri untuk Anda. Jadi, tugas paspor sudah interupsi (Anda dapat menghentikannya sambil menunggu di antrean, dan melanjutkannya nanti ketika nomor Anda dipanggil), tetapi tidak independensi (asisten Anda tidak bisa menunggu menggantikan Anda).

Kasus 5: Sejajar Tapi Tidak Bersamaan

Misalkan kantor pemerintah memiliki pemeriksaan keamanan untuk memasuki tempat tersebut. Di sini, Anda harus menghapus semua perangkat elektronik dan mengirimkannya ke petugas, dan mereka hanya mengembalikan perangkat Anda setelah Anda menyelesaikan tugas Anda.

Dalam kasus ini, tugas paspor tidak independen maupun interruptible. Bahkan jika Anda menunggu di antrean, Anda tidak dapat mengerjakan sesuatu yang lain karena Anda tidak memiliki peralatan yang diperlukan.

Demikian pula, katakanlah penyajiannya sangat matematis sehingga Anda membutuhkan konsentrasi 100% setidaknya selama 5 jam. Anda tidak dapat melakukannya saat menunggu dalam antrean untuk tugas paspor, bahkan jika Anda membawa laptop Anda.

Dalam hal ini, tugas presentasi adalah independen (baik Anda atau asisten Anda dapat melakukan 5 jam upaya terfokus), tetapi tidak interruptible.

Kasus 6: Eksekusi Serentak dan Paralel

Sekarang, katakan bahwa selain menugaskan asisten Anda ke presentasi, Anda juga membawa laptop bersama Anda ke tugas paspor. Sambil menunggu di antrean, Anda melihat bahwa asisten Anda telah membuat 10 salindia pertama di dek bersama. Anda mengirim komentar pada karyanya dengan beberapa koreksi. Kemudian, ketika Anda tiba kembali ke rumah, alih-alih 2 jam untuk menyelesaikan draf, Anda hanya perlu 15 menit.

Ini dimungkinkan karena tugas presentasi independensi (salah satu dari Anda dapat melakukannya) dan interupsi (Anda dapat menghentikannya dan melanjutkannya nanti). Jadi Anda secara bersamaan dieksekusi kedua tugas, dan melaksanakan tugas presentasi secara paralel.

Katakanlah, selain terlalu birokratis, kantor pemerintah juga korup. Dengan demikian, Anda dapat menunjukkan identifikasi Anda, memasukkannya, mulai menunggu dalam antrean nomor Anda untuk dipanggil, menyuap penjaga dan orang lain untuk menahan posisi Anda di baris, menyelinap keluar, kembali sebelum nomor Anda dipanggil, dan melanjutkan menunggu dirimu sendiri.

Dalam hal ini, Anda dapat melakukan kedua tugas paspor dan presentasi secara bersamaan dan paralel. Anda bisa menyelinap keluar, dan posisi Anda dipegang oleh asisten Anda. Anda berdua kemudian dapat mengerjakan presentasi, dll.


Kembali ke Ilmu Komputer

Di dunia komputasi, berikut ini contoh skenario yang khas dari masing-masing kasus ini:

  • Kasus 1: Pemrosesan interrupt.
  • Kasus 2: Ketika hanya ada satu prosesor, tetapi semua tugas yang dijalankan memiliki waktu tunggu karena I / O.
  • Kasus 3: Sering terlihat ketika kita berbicara tentang peta-potong atau kelompok hadoop.
  • Kasus 4: Saya pikir Kasus 4 langka. Tidak lazim untuk tugas menjadi bersamaan tetapi tidak paralel. Tetapi bisa terjadi. Sebagai contoh, misalkan tugas Anda memerlukan akses ke chip komputasi khusus yang dapat diakses hanya melalui prosesor-1. Jadi, meskipun prosesor-2 gratis dan prosesor-1 melakukan beberapa tugas lainnya, tugas perhitungan khusus tidak dapat diproses pada prosesor-2.
  • Kasus 5: juga jarang, tetapi tidak sepadat Kasus 4. Kode non-konkuren dapat menjadi wilayah kritis yang dilindungi oleh mutex. Begitu dimulai, itu harus eksekusi hingga selesai. Namun, dua daerah penting yang berbeda dapat berkembang secara bersamaan pada dua prosesor yang berbeda.
  • Kasus 6: IMO, kebanyakan diskusi tentang pemrograman paralel atau konkuren pada dasarnya berbicara tentang Kasus 6. Ini adalah campuran dan kecocokan dari kedua eksekusi paralel dan bersamaan.

Concurrency and Go

Jika Anda melihat mengapa Rob Pike mengatakan konkurensi lebih baik, Anda harus memahami alasannya. Anda memiliki tugas yang sangat panjang di mana ada beberapa periode menunggu di mana Anda menunggu beberapa operasi eksternal seperti file yang dibaca, unduhan jaringan. Dalam ceramahnya, yang dia katakan hanyalah, "hancurkan saja tugas sekuensial yang panjang ini sehingga Anda dapat melakukan sesuatu yang berguna ketika Anda menunggu." Itulah sebabnya ia berbicara tentang organisasi yang berbeda dengan berbagai koneksi.

Sekarang kekuatan Go datang dari membuat terobosan ini sangat mudah go kata kunci dan saluran. Juga, ada dukungan dasar yang sangat baik dalam runtime untuk menjadwalkan goroutines ini.

Tetapi pada dasarnya, apakah konkurensi itu lebih baik daripada paralelisme itu?

Apakah apel lebih disukai daripada jeruk?


242
2017-07-10 18:44



Saya suka pembicaraan Rob Pike: Concurrency bukan Paralelisme (lebih baik!) (slide) (berbicara)

Rob biasanya berbicara tentang Go dan biasanya membahas pertanyaan Concurrency vs Parallelism dalam penjelasan visual dan intuitif! Berikut ini ringkasan singkatnya:

Tugas: Mari kita gali setumpuk manual bahasa yang sudah usang! Satu per satu!

Task

Concurrency: Ada banyak dekomposisi dari tugas itu secara bersamaan! Satu contoh:

Gophers

Paralelisme: Konfigurasi sebelumnya terjadi secara paralel jika setidaknya ada 2 gophers yang bekerja pada saat yang sama atau tidak.


218
2017-08-20 08:52



Untuk menambahkan apa yang dikatakan orang lain:

Concurrency seperti memiliki pemain sulap menyulap banyak bola. Terlepas dari bagaimana tampaknya, pemain sulap hanya menangkap / melempar satu bola per tangan pada suatu waktu. Paralelisme memiliki beberapa pemain sulap menyulap bola secara bersamaan.


119
2017-11-05 06:21



Katakanlah Anda memiliki program yang memiliki dua utas. Program ini dapat berjalan dalam dua cara:

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

Dalam kedua kasus kami memiliki konkurensi dari fakta bahwa kami memiliki lebih dari satu thread yang sedang berjalan.

Jika kita menjalankan program ini di komputer dengan inti CPU tunggal, OS akan beralih di antara dua utas, memungkinkan satu utas dijalankan pada satu waktu.

Jika kita menjalankan program ini di komputer dengan CPU multi-core maka kita akan dapat menjalankan dua utasnya paralel - berdampingan pada waktu yang sama.


84
2018-06-10 15:39



Concurrency: Jika dua atau lebih masalah diselesaikan oleh satu prosesor. alt text

Paralelisme: Jika satu masalah diselesaikan oleh beberapa prosesor.

alt text


37
2017-11-14 07:12



Saya akan mencoba menjelaskan dengan contoh yang menarik dan mudah dimengerti. :)

Menganggap bahwa organisasi menyelenggarakan turnamen catur di mana 10 pemain (dengan keterampilan bermain catur yang sama) akan menantang a juara profesional pemain catur. Dan karena catur adalah permainan 1: 1 maka penyelenggara harus melakukan 10 pertandingan dalam waktu yang efisien sehingga mereka dapat menyelesaikan seluruh acara secepat mungkin.

Semoga skenario berikut akan dengan mudah menjelaskan beberapa cara untuk melakukan 10 game ini:

1) SERIAL - katakanlah bahwa pemain profesional bermain dengan masing-masing orang satu per satu yaitu memulai dan menyelesaikan permainan dengan satu orang dan kemudian memulai permainan berikutnya dengan orang berikutnya dan seterusnya. Dengan kata lain, mereka memutuskan untuk melakukan permainan secara berurutan. Jadi jika satu gim membutuhkan waktu 10 menit untuk menyelesaikan maka 10 gim akan memakan waktu 100 menit, anggap juga transisi dari satu gim ke gim lainnya membutuhkan waktu 6 detik, maka untuk 10 gim akan menjadi 54 detik (sekitar 1 menit).

sehingga seluruh acara akan selesai dalam 101 menit (PENDEKATAN TERBURUK)

2) KONSEKU - katakanlah bahwa profesional memainkan gilirannya dan pindah ke pemain berikutnya sehingga semua 10 pemain bermain secara bersamaan tetapi pemain profesional tidak dengan dua orang pada satu waktu, ia memainkan gilirannya dan pindah ke orang berikutnya. Sekarang anggaplah pemain profesional membutuhkan waktu 6 detik untuk bermain gilirannya dan juga waktu transisi pemain profesional b / w dua pemain adalah 6 detik sehingga total waktu transisi untuk kembali ke pemain pertama adalah 1 menit (10x6 detik). Oleh karena itu, pada saat dia kembali ke orang pertama dengan, acara yang dimulai, 2 menit telah berlalu (10xtime_per_turn_by_champion + 10xtransition_time = 2mins)

Dengan asumsi bahwa semua pemain mengambil 45 detik untuk menyelesaikan giliran mereka jadi berdasarkan 10 menit per game dari acara SERIAL no. putaran sebelum pertandingan selesai harus 600 / (45 + 6) = 11 putaran (kira-kira)

Jadi seluruh acara akan selesai dalam 11xtime_per_turn_by_player _ & _ champion + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sec = 20.35 menit (kurang-lebih)

LIHAT PENINGKATAN dari 101 menit hingga 20,35 menit (PENDEKATAN LEBIH BAIK)

3) PARALEL - katakanlah penyelenggara mendapatkan beberapa dana tambahan dan dengan demikian memutuskan untuk mengundang dua pemain juara profesional(keduanya sama-sama cakap) dan membagi himpunan 10 pemain yang sama (penantang) dalam dua kelompok masing-masing 5 orang dan menugaskan mereka ke dua juara, masing-masing satu kelompok. Sekarang acara tersebut berkembang secara paralel dalam dua set ini yaitu setidaknya dua pemain (satu di setiap grup) bermain melawan dua pemain profesional di grup mereka masing-masing.

Namun dalam kelompok pemain profesional dengan mengambil satu pemain pada suatu waktu (yaitu secara berurutan) sehingga tanpa perhitungan, Anda dapat dengan mudah menyimpulkan bahwa seluruh acara akan selesai pada 101/2 = 50.5 menit untuk menyelesaikannya.

LIHAT PENINGKATAN dari 101 menit hingga 50,5 menit (PENDEKATAN YANG BAIK)

4) CONCURRENT + PARALEL - Dalam skenario di atas, mari kita katakan bahwa dua pemain juara akan bermain secara bersamaan (baca poin ke-2) dengan 5 pemain dalam kelompok masing-masing sehingga sekarang permainan lintas kelompok berjalan secara paralel tetapi dalam kelompok mereka berjalan secara bersamaan.

Jadi gim dalam satu grup kira-kira selesai dalam 11xtime_per_turn_by_player _ & _ champion + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sec = 15.5 menit (kurang-lebih)

Jadi seluruh kejadian (yang melibatkan dua kelompok paralel yang berjalan) akan kira-kira selesai dalam 15.5 menit

LIHAT PENINGKATAN dari 101 menit hingga 15,5 menit (PENDEKATAN TERBAIK)

CATATAN: dalam skenario di atas jika Anda mengganti 10 pemain dengan 10 pekerjaan serupa dan dua pemain profesional dengan dua inti CPU, maka pengaturan berikut akan tetap benar:

SERIAL> PARALLEL> KONSUREN> KONSUR + PARALLEL

(CATATAN: pesanan ini mungkin berubah untuk skenario lain karena pemesanan ini sangat bergantung pada inter-ketergantungan pekerjaan, komunikasi membutuhkan pekerjaan b / w dan transisi b / b pekerjaan overhead)


27
2018-04-22 11:24



concurency:   arus eksekusi ganda dengan potensi untuk berbagi sumber daya

Ex:   dua utas yang bersaing untuk port I / O.

paralelisme:   membagi masalah dalam beberapa potongan serupa.

Ex:   parsing file besar dengan menjalankan dua proses pada setiap setengah dari file.


25
2018-06-26 17:23



Mereka memecahkan masalah yang berbeda. Concurrency memecahkan masalah memiliki sumber daya CPU yang langka dan banyak tugas. Jadi, Anda membuat untaian atau jalur eksekusi independen melalui kode untuk berbagi waktu pada sumber daya yang langka. Hingga saat ini, konkurensi mendominasi pembahasan karena ketersediaan CPU.

Paralelisme memecahkan masalah menemukan tugas yang cukup dan tugas yang tepat (yang dapat dipisah dengan benar) dan mendistribusikannya ke sumber daya CPU yang berlimpah. Paralelisme selalu ada di sekitar tentu saja, tetapi itu datang ke permukaan karena prosesor multi-core sangat murah.


22
2018-06-26 17:36



Contoh sederhana:

Bersamaan adalah: "Dua antrian mengakses satu mesin ATM"

Paralel adalah: "Dua antrian dan dua mesin ATM"


21
2018-01-28 03:29