Apa perbedaan antara konkurensi, paralelisme, dan metode asinkron?

178

Concurrency memiliki dua tugas yang berjalan secara paralel pada utas yang terpisah. Namun, metode asinkron berjalan secara paralel tetapi pada 1 utas yang sama. Bagaimana ini dicapai? Juga, bagaimana dengan paralelisme?

Apa perbedaan antara ketiga konsep ini?

GurdeepS
sumber
8
Istilah "asinkron" dapat berarti banyak hal yang berbeda. Istilah-istilah itu terkait, tetapi mereka tidak menggambarkan set hal-hal yang terpisah. Makna tumpang tindih dan bervariasi berdasarkan situasi.
Runcing
2
Jadi konkurensi pertama menjalankan dua proses atau lebih secara bersamaan. Dengan keluar dari jalan, konkuren tidak paralel. Proses paralel membutuhkan dua atau lebih inti sedangkan proses bersamaan dapat berbagi waktu satu inti.
Rick O'Shea

Jawaban:

139

Bersamaan dan paralel secara efektif adalah prinsip yang sama seperti yang Anda duga dengan benar, keduanya terkait dengan tugas yang dieksekusi secara bersamaan meskipun saya akan mengatakan bahwa tugas paralel harus benar-benar multitasking, dieksekusi "pada saat yang sama" sedangkan bersamaan dapat berarti bahwa tugas tersebut berbagi thread eksekusi sementara masih tampak mengeksekusi secara paralel.

Metode asinkron tidak secara langsung terkait dengan dua konsep sebelumnya, asinkron digunakan untuk menyajikan kesan penugasan serentak atau paralel, tetapi secara efektif pemanggilan metode asinkron biasanya digunakan untuk proses yang perlu melakukan pekerjaan jauh dari aplikasi saat ini dan kami tidak tidak ingin menunggu dan memblokir aplikasi kami menunggu tanggapan.

Misalnya, mendapatkan data dari database bisa memakan waktu tetapi kami tidak ingin memblokir UI kami menunggu data. Panggilan async mengambil referensi panggilan balik dan mengembalikan eksekusi ke kode Anda segera setelah permintaan ditempatkan dengan sistem jarak jauh. UI Anda dapat terus merespons pengguna saat sistem jarak jauh melakukan pemrosesan apa pun yang diperlukan, setelah mengembalikan data ke metode panggilan balik Anda, maka metode itu dapat memperbarui UI (atau menyerahkan pembaruan itu) yang sesuai.

Dari perspektif Pengguna, ini tampak seperti multitasking tetapi mungkin tidak.


EDIT

Mungkin perlu ditambahkan bahwa dalam banyak implementasi pemanggilan metode asinkron akan menyebabkan utas diputar, tetapi itu tidak penting, itu benar-benar tergantung pada operasi yang dijalankan dan bagaimana respons dapat diberitahukan kembali ke sistem.

Lazarus
sumber
34
Saya berpendapat bahwa Anda memiliki paralelisme dan konkurensi yang tercampur dalam paragraf pertama Anda. Concurrency mengacu pada pengelolaan beberapa utas eksekusi, di mana paralelisme lebih spesifik, beberapa utas eksekusi yang dijalankan secara bersamaan. Konkurensi adalah istilah yang lebih luas yang dapat mencakup paralelisme.
Mark H
7
Walaupun kedua kata tersebut sangat mirip dan dapat membingungkan (dan sering kali), mereka memiliki definisi yang berbeda: Bersamaan = Ada, terjadi, atau dilakukan pada saat yang sama. Paralel = atau berkaitan dengan kinerja nyata atau aktual lebih dari satu operasi pada satu waktu, oleh perangkat yang sama atau berbeda. Seperti yang Anda lihat paralel tidak selalu berarti bersamaan tetapi bisa saja tampak bersamaan. Pada akhirnya, kata-kata tersebut sering digunakan secara bergantian dan dengan n dev adalah ruangan, Anda mungkin akan mendapatkan definisi n +1 ;)
Lazarus
3
@Mehrdad Jika Anda akan mendasarkan definisi kata-kata kamus Anda pada penggunaannya dalam materi pemasaran maka saya pikir Anda cenderung mendapati diri Anda berada pada posisi yang kurang menguntungkan.
Lazarus
6
Salah. Dalam konteks pemrograman, konkurensi adalah kemampuan kode Anda untuk "disusun" menjadi bit-bit logika yang dapat dijalankan pada saat bersamaan. Paralelisme (ketika dikombinasikan dengan konkurensi) mengambil kode tersebut dan menjalankannya pada mesin 100-inti.
Frank Radocaj
2
@ FrankRadocaj benar. Bersamaan berarti bahwa program dapat dipecah menjadi beberapa unit (unit dasarnya adalah utas) yang dapat dijalankan dalam urutan apa pun dan memiliki hasil yang menentukan. Paralel berarti unit / utas ini dijalankan secara bersamaan pada beberapa prosesor.
89

Pendeknya,

Concurrency berarti banyak tugas yang memulai, menjalankan, dan menyelesaikan dalam periode waktu yang tumpang tindih, tanpa urutan tertentu. Paralelisme adalah ketika beberapa tugas ATAU beberapa bagian dari tugas unik benar-benar berjalan pada saat yang sama, misalnya pada prosesor multi-core.

Ingatlah bahwa Concurrency dan paralelisme BUKAN hal yang sama.

Perbedaan antara konkurensi vs paralelisme

Sekarang mari kita buat daftar perbedaan yang luar biasa antara konkurensi dan paralelisme.

Concurrency adalah ketika dua tugas dapat mulai, dijalankan, dan selesai dalam periode waktu yang tumpang tindih. Paralelisme adalah ketika tugas secara harfiah dijalankan pada saat yang sama, misalnya. pada prosesor multi-core.

Concurrency adalah komposisi dari proses yang dieksekusi secara independen, sementara paralelisme adalah eksekusi simultan dari (kemungkinan terkait) perhitungan.

Concurrency adalah tentang berurusan dengan banyak hal sekaligus. Paralelisme adalah tentang melakukan banyak hal sekaligus.

Suatu aplikasi dapat bersamaan - tetapi tidak paralel, yang berarti bahwa ia memproses lebih dari satu tugas pada saat yang sama, tetapi tidak ada dua tugas yang dijalankan pada saat yang bersamaan.

Suatu aplikasi dapat paralel - tetapi tidak bersamaan, yang berarti bahwa ia memproses beberapa tugas sub-tugas dalam CPU multi-core pada saat yang bersamaan.

Suatu aplikasi bisa tidak paralel - atau bersamaan, yang berarti bahwa ia memproses semua tugas satu per satu, secara berurutan.

Suatu aplikasi dapat bersifat paralel - dan bersamaan, yang berarti bahwa ia memproses banyak tugas secara bersamaan dalam multi-core CPU secara bersamaan.

Konkurensi

Concurrency pada dasarnya berlaku ketika kita berbicara tentang minimum dua tugas atau lebih. Ketika suatu aplikasi mampu menjalankan dua tugas secara virtual pada waktu yang bersamaan, kami menyebutnya aplikasi bersamaan. Meskipun di sini tugas-tugas berjalan sepertinya secara bersamaan, tetapi pada dasarnya mereka MUNGKIN tidak. Mereka mengambil keuntungan dari fitur pengiris waktu CPU dari sistem operasi di mana setiap tugas menjalankan bagian dari tugasnya dan kemudian pergi ke keadaan menunggu. Saat tugas pertama dalam status menunggu, CPU ditugaskan ke tugas kedua untuk menyelesaikan bagian tugasnya.

Sistem operasi berdasarkan prioritas tugas, dengan demikian, menetapkan CPU dan sumber daya komputasi lainnya, misalnya memori; secara bergantian untuk semua tugas dan beri mereka kesempatan untuk menyelesaikan. Untuk pengguna akhir, tampaknya semua tugas berjalan secara paralel. Ini disebut konkurensi.

Paralelisme

Paralelisme tidak membutuhkan dua tugas untuk eksis. Secara harfiah menjalankan bagian tugas ATAU beberapa tugas, pada saat yang sama menggunakan infrastruktur multi-core CPU, dengan menetapkan satu inti untuk setiap tugas atau sub-tugas.

Paralelisme membutuhkan perangkat keras dengan beberapa unit pemrosesan, pada dasarnya. Dalam CPU single core, Anda mungkin mendapatkan konkurensi tetapi BUKAN paralelisme.

Metode asinkron

Ini tidak terkait dengan Konkurensi dan paralelisme, asinkron digunakan untuk menyajikan kesan penugasan serentak atau paralel, tetapi secara efektif pemanggilan metode asinkron biasanya digunakan untuk proses yang perlu dilakukan bekerja jauh dari aplikasi saat ini dan kami tidak ingin tunggu dan blokir aplikasi kami menunggu tanggapan.

Vipin Jain
sumber
2
Sangat membantu. Terima kasih
Neha
Saya masih bingung tentang Async vs concurrency. Saya telah melihat frasa "menjalankan tugas secara tidak sinkron" dan "menjalankan tugas secara bersamaan" digunakan. Menjalankan tugas secara tidak sinkron dan menjalankan tugas secara bersamaan tampaknya memiliki arti yang sama?
Moondra
1
@Moondra tugas Async berjalan pada satu utas, tidak ada yang terkait dengan multithreading. tugas async mengirimkan tugas ke proses eksternal di luar aplikasi Anda ... yaitu basis data, pembaca file ... ini adalah proses IO kemudian panggilan balik ditambahkan pada proses untuk melakukan tindakan ketika proses IO selesai. apa yang saya tidak yakin adalah bahwa ada beberapa fitur "async" dalam beberapa bahasa pemrograman yang membuat utas baru yang terpisah ketika Anda memanggil tugas async, saya mendengar C # adalah satu tetapi saya tidak yakin tentang hal itu
Tobi Owolawi
56

Konkurensi adalah ketika eksekusi beberapa tugas disisipkan, alih-alih setiap tugas dieksekusi secara berurutan.

Paralelisme adalah ketika tugas-tugas ini sebenarnya dieksekusi secara paralel.

masukkan deskripsi gambar di sini


Asynchrony adalah konsep yang terpisah (meskipun terkait dalam beberapa konteks). Ini merujuk pada fakta bahwa satu peristiwa mungkin terjadi pada waktu yang berbeda (tidak sinkron) dengan peristiwa lain. Diagram di bawah ini mengilustrasikan apa perbedaan antara eksekusi sinkron dan asinkron, di mana para aktor dapat berhubungan dengan berbagai utas, proses, atau bahkan server.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Dimos
sumber
6
Ilustrasi sederhana dan efektif.
contactmatt
1
Apakah konkurensi sama dengan asinkron?
no.
1
2 konsep ini sangat dekat, memang, tetapi tidak sama. Dalam praktiknya, asynchrony lebih terkait dengan interaksi antara tindakan (katakanlah A & B), di mana satu (B) dipicu oleh yang lain (A) dan apakah yang kedua akan menunggu yang pertama selesai. Konkurensi adalah istilah yang lebih umum untuk tindakan yang juga dapat tidak terkait satu sama lain dan apakah mereka dieksekusi secara berurutan atau eksekusi mereka disisipkan.
Dimos
1
Jadi asynchrony kebanyakan tentang pemblokiran dan non pemblokiran
Daniel
15

Setiap orang mengalami kesulitan untuk mengaitkan asinkron dengan paralelisme atau konkurensi karena asinkron bukan merupakan antonim terhadap paralel atau konkuren. Ini adalah antonim dari Sinkron. Yang hanya menunjukkan jika sesuatu, dalam hal ini utas, akan disinkronkan dengan yang lain, dalam hal ini utas lainnya.

Aloysius Snuffleupagus
sumber
13

Ada beberapa skenario di mana konkurensi dapat terjadi:

Asynchrony - Ini berarti program Anda melakukan operasi non-pemblokiran. Misalnya, ia dapat memulai permintaan untuk sumber daya jarak jauh melalui HTTP dan kemudian melanjutkan untuk melakukan beberapa tugas lain sambil menunggu respons diterima. Ini seperti ketika Anda mengirim email dan kemudian melanjutkan hidup Anda tanpa menunggu jawaban.

Paralelisme - Ini berarti bahwa program Anda memanfaatkan perangkat keras mesin multi-core untuk menjalankan tugas secara bersamaan dengan memecah pekerjaan menjadi tugas, yang masing-masing dieksekusi pada inti yang terpisah. Ini seperti bernyanyi di kamar mandi: Anda sebenarnya melakukan dua hal pada waktu yang bersamaan.

Multithreading - Ini adalah implementasi perangkat lunak yang memungkinkan berbagai utas dijalankan secara bersamaan. Program multithreaded tampaknya melakukan beberapa hal pada saat yang sama bahkan ketika itu dijalankan pada mesin single-core. Ini agak seperti mengobrol dengan orang yang berbeda melalui berbagai jendela IM; meskipun sebenarnya Anda bolak-balik, hasilnya adalah Anda melakukan banyak percakapan sekaligus.

rahulaga_dev
sumber
Ini adalah analogi yang sangat bagus! Terima kasih. Apakah adil mengatakan konkurensi dapat didefinisikan dengan definisi multithreading Anda? Jadi concurrency = multithreading pada single-core yang sepertinya terjadi pada saat yang sama tetapi benar-benar beralih bolak-balik dengan sangat cepat?
wongz
3

Konkurensi

Konkurensi berarti bahwa suatu aplikasi membuat kemajuan pada lebih dari satu tugas pada saat bersamaan (bersamaan). Nah, jika komputer hanya memiliki satu CPU aplikasi mungkin tidak membuat kemajuan pada lebih dari satu tugas pada waktu yang sama, tetapi lebih dari satu tugas sedang diproses pada suatu waktu di dalam aplikasi. Itu tidak sepenuhnya menyelesaikan satu tugas sebelum memulai yang berikutnya.

Paralelisme

Paralelisme berarti bahwa suatu aplikasi membagi tugas-tugasnya menjadi subtugas yang lebih kecil yang dapat diproses secara paralel, misalnya pada banyak CPU pada waktu yang bersamaan.

Concurrency vs Parallelism In Detail

Seperti yang Anda lihat, konkurensi terkait dengan cara suatu aplikasi menangani banyak tugas. Aplikasi dapat memproses satu tugas pada saat bersamaan (secara berurutan) atau mengerjakan beberapa tugas pada saat yang bersamaan (bersamaan).

Paralelisme di sisi lain, terkait dengan bagaimana aplikasi menangani tugas masing-masing individu. Aplikasi dapat memproses tugas secara serial dari awal hingga akhir, atau membagi tugas menjadi beberapa subtugas yang dapat diselesaikan secara paralel.

Seperti yang Anda lihat, aplikasi bisa bersamaan, tetapi tidak paralel. Ini berarti bahwa ia memproses lebih dari satu tugas pada saat yang sama, tetapi tugas tersebut tidak dipecah menjadi subtugas.

Aplikasi juga bisa paralel tetapi tidak bersamaan. Ini berarti bahwa aplikasi hanya bekerja pada satu tugas pada satu waktu, dan tugas ini dipecah menjadi subtugas yang dapat diproses secara paralel.

Selain itu, suatu aplikasi bisa tidak bersamaan atau paralel. Ini berarti bahwa ia bekerja hanya pada satu tugas pada satu waktu, dan tugas tersebut tidak pernah dipecah menjadi subtugas untuk eksekusi paralel.

Akhirnya, sebuah aplikasi dapat juga bersamaan dan paralel, karena keduanya bekerja pada banyak tugas pada saat yang bersamaan, dan juga membagi setiap tugas menjadi beberapa subtugas untuk eksekusi paralel. Namun, beberapa manfaat konkurensi dan paralelisme dapat hilang dalam skenario ini, karena CPU di komputer sudah cukup sibuk dengan konkurensi atau paralelisme saja. Menggabungkannya dapat menyebabkan hanya kenaikan kinerja kecil atau bahkan hilangnya kinerja. Pastikan Anda menganalisis dan mengukur sebelum Anda mengadopsi model paralel bersamaan secara membabi buta.

Dari http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html

LONGHORN007
sumber
3

Paralel:Ini adalah istilah luas yang berarti bahwa dua potong kode mengeksekusi itu "pada saat yang sama". Tidak masalah apakah itu paralelisme "nyata" atau jika dipalsukan melalui beberapa pola desain yang cerdas. Intinya adalah bahwa Anda dapat memulai "tugas" pada saat yang sama dan kemudian mengendalikannya secara terpisah (dengan mutex dan semua trik yang sesuai). Tetapi biasanya Anda lebih suka menggunakan kata "paralel" hanya untuk paralelisme "benar", seperti pada: Anda mewujudkannya melalui multitasking non-kooperatif (baik melalui inti CPU / GPU, atau hanya pada tingkat perangkat lunak dengan membiarkan OS mengelolanya. pada level yang sangat rendah). Orang enggan mengatakan "paralel" hanya untuk kode sekuensial rumit yang memalsukan paralelisme, seperti yang akan Anda temukan di javascript jendela browser misalnya. Karenanya alasan mengapa orang di utas ini mengatakan "asinkron tidak ada hubungannya dengan paralelisme". Ya, tapi jangan membingungkan mereka.

Bersamaan: tidak mungkin ada konkurensi tanpa paralelisme (apakah disimulasikan atau nyata, seperti yang saya jelaskan di atas), tetapi istilah ini berfokus secara khusus pada kenyataan bahwa kedua sistem akan mencoba mengakses sumber daya yang sama pada saat yang sama di beberapa titik. Ini menekankan pada fakta bahwa Anda harus menghadapinya.

Asinkron : semua orang benar dengan mengatakan bahwa asinkron tidak terkait dengan paralelisme, tetapi membuka jalan untuk itu (beban ada pada Anda untuk membuat segala sesuatu paralel atau tidak - terus membaca).

"Asinkron" mengacu pada representasi paralelisme yang memformalkan tiga hal dasar yang biasanya terlibat dalam paralelisme: 1) menentukan inisialisasi tugas (katakan kapan dimulai dan parameter apa yang didapat), 2) apa yang harus dilakukan setelah selesai dan 3) Kode apa yang harus terus dilakukan di antara.

Tapi itu masih hanya sintaks (biasanya direpresentasikan sebagai metode panggilan balik). Di belakang layar, sistem yang mendasarinya mungkin hanya memutuskan bahwa apa yang disebut "tugas" hanyalah potongan-potongan kode untuk ditumpuk sampai selesai kode yang sedang dieksekusi. Dan kemudian ia melepaskan mereka satu per satu dan mengeksekusi mereka secara berurutan. Atau tidak. Mungkin juga membuat utas per tugas dan menjalankannya secara paralel. Siapa peduli? Bagian itu tidak termasuk dalam konsep;)

jeancallisti
sumber
2

Ada sedikit semantik untuk dihapus di sini:

Konkurensi atau Paralelisme adalah masalah pertentangan sumber daya , sedangkan Asynchronous adalah tentang aliran kontrol .

Prosedur yang berbeda (atau operasi penyusunnya ) disebut Asynchronous, ketika tidak ada implementasi deterministik dari urutan pemrosesan mereka ; dengan kata lain, ada kemungkinan bahwa salah satu dari mereka dapat diproses pada waktu tertentu T. Menurut definisi, banyak prosesor (mis. CPU atau Orang) memungkinkan beberapa dari mereka untuk diproses pada waktu yang sama; pada satu prosesor, pemrosesan mereka disisipkan (mis. Utas).

Prosedur atau operasi asinkron disebut sebagai Bersamaan, ketika mereka berbagi sumber daya ; Konkurensi adalah kemungkinan pertikaian yang pasti pada waktu tertentu T. Paralelisme dijamin sepele ketika tidak ada sumber daya yang dibagikan (mis. Prosesor dan penyimpanan yang berbeda); jika tidak, kontrol Concurrency harus ditangani.

Karenanya prosedur atau operasi Asynchronous dapat diproses secara Paralel atau Bersamaan dengan yang lain.

Evans AB
sumber
2

Concurrency berarti menjalankan beberapa tugas pada saat yang bersamaan tetapi tidak harus secara bersamaan. Ketika Anda harus melakukan lebih dari satu tugas tetapi Anda memiliki satu sumber daya maka kami pergi untuk konkurensi. Dalam lingkungan inti tunggal concurrency dicapai dengan Context Switching.

Paralelisme adalah seperti melakukan lebih dari satu tugas secara bersamaan seperti Anda bisa bernyanyi dan mandi bersama. Sekarang Anda melakukan tugas secara Paralel.

Asynchronous adalah sesuatu yang terkait dengan eksekusi ulir dalam model asinkron ketika satu tugas dijalankan, Anda bisa beralih ke tugas yang berbeda tanpa menunggu yang sebelumnya selesai.

Pemrograman asinkron membantu kita mencapai konkurensi. Pemrograman asinkron dalam lingkungan multi-utas adalah cara untuk mencapai paralelisme.

Dhirendra Gautam
sumber
2

"Sinkronisasi dan async adalah model pemrograman. Bersamaan dan paralel adalah cara tugas dijalankan ...". Sumber: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66

Dengan kata lain, sinkronisasi dan async menjelaskan bagaimana program Anda dieksekusi ketika membuat panggilan fungsi (akankah ia menunggu atau akankah itu melanjutkan eksekusi?), Sementara secara bersamaan dan paralel menggambarkan bagaimana suatu fungsi (tugas) akan dieksekusi (concurrent = mungkin dieksekusi pada pada saat yang sama, paralel = dijalankan secara efektif pada saat yang sama).

Pedro Boechat
sumber
medium bukan sumber, ini adalah artikel oleh orang lain yang berbicara tentang pemahamannya tentang suatu subjek, itu tidak menjadikannya otoritas.
Moha unta maha kuasa
1
Itu kutipan, oleh karena itu sumbernya. Sebagian besar jawaban di sini tidak ditulis oleh pihak berwenang di bidang apa pun dan penjelasan yang diberikan penulis cukup baik.
Pedro Boechat
Di stackoverflow Anda setidaknya memiliki sistem pemungutan suara, dan itu adalah komunitas profesional. Siapa pun dapat menulis apa pun di media. Itu bukan perbandingan yang adil antara keduanya.
Moha si unta Mahakuasa
1
Siapa pun dapat menulis apa pun di sini juga, saya tidak tahu mengapa Anda memilih Medium. Bagaimanapun, saya seorang programmer profesional dan saya mendukung pemahaman ini. Dan saya anggap elegan karena relatif pendek.
Pedro Boechat
Masalahnya bukan bahwa Medium adalah sumber yang buruk, masalahnya adalah bahwa jawaban yang hanya menautkan ke halaman eksternal bukanlah jawaban. Anda bisa sangat meningkatkan jawaban ini jika Anda menguraikan bagian yang dikutip atau meringkas isi artikel daripada hanya menautkannya.
David Schwartz
1

CONCURRENCY VS PARALLELISM: concurrency pada satu titik waktu hanya satu tugas yang dapat dilakukan. contoh: paralelisme prosesor cpu tunggal pada satu titik kita bisa melakukan banyak tugas. contoh: prosesor dual core atau multi core

rva
sumber
1

Di sini saya jelaskan dengan beberapa contoh


Paralelisme

Sebuah GPU menggunakan pemrosesan paralel untuk memproses blok kode yang sama (AKA kernel ) pada ribuan benang fisik dan logis. Idealnya, proses dimulai dan diakhiri untuk semua utas secara bersamaan. Sebuah inti CPU tunggal tanpa hyperthreading tidak dapat melakukan pemrosesan paralel.

Catatan: Saya katakan idealnya karena ketika Anda menjalankan kernel dengan ukuran panggilan 7M pada perangkat keras dengan utas 6M, ia harus menjalankan dua kali menjalankan kode yang sama pada semua utas 6M secara paralel sambil mengonsumsi semua utas 6M setiap kali.

  • satu kernel (sepotong kode) dijalankan pada banyak prosesor
  • serentak
  • dengan urutan eksekusi tunggal ( kernel harus melakukan hal yang sama di semua utas, jadi "percabangan" atau "jika" dihindari karena mereka akan menghabiskan sumber daya secara drastis dengan membuat banyak NOP (tidak ada operasi) untuk menyinkronkan semua utas)
  • dasarnya meningkatkan kecepatan secara drastis
  • secara drastis membatasi apa yang dapat Anda lakukan
  • sangat tergantung pada perangkat keras

Catatan: Paralelisme tidak terbatas pada GPU.


Konkurensi

Layanan web menerima banyak permintaan kecil secara waktu nyata dan perlu menangani setiap permintaan ini secara berbeda, kapan saja, dan terlepas dari permintaan lain atau pekerjaan internal apa pun. Namun Anda ingin layanan web tetap beroperasi setiap saat tanpa merusak kondisi data atau kesehatan sistem.

Bayangkan saja pengguna memperbarui catatan dan pengguna lain menghapus catatan yang sama pada saat yang sama.

  • banyak tugas yang dieksekusi
  • dalam waktu nyata (atau kapan pun permintaan datang)
  • dengan urutan eksekusi yang berbeda (tidak seperti kernel dalam pemrosesan paralel, tugas bersamaan dapat melakukan hal yang berbeda, Anda kemungkinan besar harus mengantri atau memprioritaskannya)
  • pada dasarnya meningkatkan waktu respons rata-rata karena tugas # 2 tidak harus menunggu tugas # 1 selesai
  • pada dasarnya mengorbankan waktu komputasi karena banyak tugas berjalan pada saat yang sama dan ada sumber daya yang terbatas
  • perlu mengelola sumber daya bersama dengan benar sehingga tidak mengalami kebuntuan atau merusak data.

Catatan : Permintaan ini biasanya menggunakan beberapa sumber daya penting seperti memori, koneksi database atau bandwidth. Namun Anda ingin layanan web menjadi responsif setiap saat. Asynchronous adalah kunci untuk membuatnya responsif , bukan konkurensi


Tidak sinkron

Satu proses berat (seperti operasi I / O) dapat dengan mudah memblokir GUI jika dijalankan pada utas GUI. Untuk menjamin respons UI , proses yang berat dapat dijalankan secara tidak sinkron. Lebih baik menjalankan operasi async yang sama satu per satu . mis. beberapa operasi IO-terikat dapat secara signifikan lebih lambat jika dijalankan pada saat yang sama, jadi lebih baik untuk mengantri mereka selesai untuk memulai

  • satu tugas atau banyak tugas dijalankan di utas lainnya
  • satu kali
  • jika ada satu tugas, maka tidak ada urutan sehingga Anda baik menunggu sampai selesai atau Anda api-dan-lupa
  • jika itu adalah kumpulan tugas maka Anda dapat menjalankan dan melupakan semuanya pada saat yang sama, menunggu semuanya selesai, atau menjalankan setiap penyelesaian tugas untuk memulai
  • pada dasarnya mengurangi kinerja karena overhead
  • memberikan respons terhadap utas lain (efektif terhadap pemblokiran utas UI atau utas penting lainnya)

Catatan: operasi async yang dijalankan secara bersamaan (yaitu lebih dari satu kali dalam satu waktu) adalah operasi bersamaan.


Catatan: Konkurensi dan asinkron sering membingungkan satu sama lain. Concurrency mengacu pada bagian berbeda dari sistem yang bekerja bersama tanpa mengganggu satu sama lain (masalah ini sering diselesaikan dengan kunci, semafor atau mutex). Asynchronousy adalah bagaimana Anda mencapai daya tanggap (seperti threading).

* Catatan: Asynchronous dan Multithreading sering bingung satu sama lain. Kode asinkron tidak selalu melibatkan utas baru. itu bisa berupa operasi perangkat keras atau sebagaimana Stephan menyebutnya operasi murni, baca ini

misalnya dalam kode WPF + C # di bawah ini, await Task.Run(()=> HeavyMethod(txt))sedang memecahkan masalah asinkron, sementara textBox.Dispatcher.Invokememecahkan masalah konkurensi:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}
Bizhan
sumber
0

Saya akan membuatnya singkat dan menarik untuk membungkus kepala Anda di sekitar konsep-konsep ini.

Bersamaan vs Paralel - Cara tugas dieksekusi.

Ambil contoh dalam kehidupan nyata: Ada tantangan yang mengharuskan Anda untuk makan kue yang sangat besar dan menyanyikan lagu secara keseluruhan. Anda akan menang jika Anda yang tercepat yang menyanyikan seluruh lagu dan menyelesaikan kue. Jadi aturannya adalah Anda bernyanyi dan makan secara bersamaan . Bagaimana Anda melakukannya bukan milik aturan. Anda dapat makan seluruh kue, lalu menyanyikan seluruh lagu, atau Anda bisa makan setengah kue, lalu menyanyikan setengah lagu, lalu melakukannya lagi, dll.

Paralelisme adalah jenis konkurensi tertentu di mana tugas benar-benar dijalankan secara bersamaan. Dalam ilmu komputer, paralelisme hanya dapat dicapai di lingkungan multicore.

Synchronous vs. Asynchronous - Model-model pemrograman.

Dalam sinkronisasi, Anda menulis kode sebagai langkah yang dijalankan secara berurutan, dari atas ke bawah. Dalam model pemrograman async, Anda menulis kode sebagai tugas, yang kemudian dieksekusi secara bersamaan. Menjalankan secara bersamaan berarti bahwa semua tugas kemungkinan dilaksanakan pada saat yang sama.

Srikanth Bandaru
sumber