Apa perbedaan antara asinkron dan sinkron eksekusi?
Ketika anda menjalankan sesuatu serentak, anda menunggu untuk itu untuk menyelesaikan sebelum pindah ke tugas lain. Ketika anda menjalankan sesuatu asynchronously, anda dapat melanjutkan ke tugas lain sebelum selesai.
Bahwa menjadi kata, dalam konteks komputer ini diterjemahkan ke dalam melaksanakan suatu proses atau tugas lain "benang." benang adalah serangkaian perintah (blok kode) yang ada sebagai unit kerja. Sistem operasi dapat mengelola beberapa benang dan menetapkan benang sepotong ("slice") dari processor waktu sebelum beralih ke thread lain untuk memberikan giliran untuk melakukan beberapa pekerjaan. Pada intinya (mengampuni pun), sebuah prosesor hanya dapat menjalankan perintah, ia tidak memiliki konsep melakukan dua hal pada satu waktu. Sistem operasi mensimulasikan ini dengan mengalokasikan irisan waktu untuk benang yang berbeda.
Sekarang, jika anda memperkenalkan beberapa core/prosesor ke dalam campuran, maka hal-hal yang DAPAT benar-benar terjadi pada waktu yang sama. Sistem operasi dapat mengalokasikan waktu untuk satu thread pada processor, kemudian mengalokasikan blok yang sama dari waktu ke thread lain pada prosesor yang berbeda. Semua ini adalah tentang memungkinkan sistem operasi untuk mengelola penyelesaian tugas anda sementara anda dapat pergi di dalam kode anda dan melakukan hal-hal lain.
Asynchronous pemrograman adalah topik yang rumit karena semantik bagaimana hal-hal yang mengikat bersama-sama ketika anda dapat melakukannya pada waktu yang sama. Ada banyak artikel dan buku-buku tentang topik ini, lihat!
Synchronous/Asynchronous tidak ADA HUBUNGANNYA DENGAN MULTI-THREADING.
Sinkron, atau Disinkronkan berarti "terhubung", atau "tergantung" dalam beberapa cara. Dengan kata lain, dua sinkron tugas-tugas yang harus diketahui satu sama lain, dan salah satu tugas yang harus mengeksekusi dengan beberapa cara yaitu tergantung pada yang lain, seperti menunggu untuk memulai sampai tugas lain telah selesai. Asynchronous berarti mereka benar-benar independen dan tidak satu harus mempertimbangkan yang lainnya dengan cara apapun, baik dalam inisiasi atau di eksekusi.
Sinkron (satu thread):
1 thread -> |<---A---->||<----B---------->||<------C----->|
Sinkron (multi-threaded):
thread A -> |<---A---->|
\
thread B ------------> ->|<----B---------->|
\
thread C ----------------------------------> ->|<------C----->|
Asynchronous (satu thread):
A-Start ------------------------------------------ A-End
| B-Start -----------------------------------------|--- B-End
| | C-Start ------------------- C-End | |
| | | | | |
V V V V V V
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->|
Asynchronous (multi-Threaded):
thread A -> |<---A---->|
thread B -----> |<----B---------->|
thread C ---------> |<------C--------->|
<
, >
karakter.|
Secara teknis, konsep synchronous/asynchronous benar-benar tidak memiliki apa-apa untuk melakukan dengan benang. Meskipun, secara umum, hal ini tidak biasa untuk menemukan asynchronous tugas-tugas yang berjalan pada thread yang sama, adalah mungkin, (lihat di bawah untuk contoh) dan umum untuk mendapatkan dua atau lebih tugas melaksanakan serentak pada terpisah benang... Tidak, konsep synchronous/asynchronous telah dilakukan hanya dengan apakah atau tidak kedua atau berikutnya tugas dapat dimulai sebelum yang lain (pertama) tugas telah selesai, atau apakah itu harus menunggu. Itu adalah semua. Apa benang (atau benang), atau proses, atau Cpu, atau memang, apa hardware, tugas[s] yang dilaksanakan adalah tidak relevan. Memang, untuk membuat titik ini saya telah diedit grafis untuk menunjukkan hal ini.
ASYNCHRONOUS CONTOH. Dalam memecahkan berbagai masalah teknik, perangkat lunak ini dirancang untuk berpisah secara keseluruhan masalah menjadi beberapa tugas individu, dan kemudian mengeksekusi mereka secara asinkron. Pembalikan matriks, atau elemen hingga analisis masalah, adalah contoh yang baik. Dalam komputasi, menyortir daftar adalah contoh. Cepat semacam rutinitas, misalnya, membagi list menjadi dua daftar, dan jenis masing-masing dari mereka dengan memanggil dirinya sendiri secara rekursif. Dalam kedua contoh di atas, dua tugas dapat (dan sering) dilaksanakan secara asinkron. Mereka tidak perlu di thread terpisah. Bahkan mesin dengan satu CPU, dan hanya satu thread eksekusi dapat dikodekan untuk memulai pengolahan kedua tugas sebelumnya yang pertama telah selesai. Satu-satunya kriteria adalah bahwa hasil dari satu tugas yang tidak diperlukan sebagai masukan ke tugas lain. Selama waktu awal dan akhir dari tugas-tugas yang tumpang tindih, (mungkin hanya jika output tidak diperlukan sebagai masukan untuk yang lain), mereka sedang dieksekusi asynchronously, tidak peduli berapa banyak benang yang digunakan.
SINKRON CONTOH. Setiap proses yang terdiri dari beberapa tugas-tugas di mana tugas-tugas yang harus dijalankan dalam urutan, tetapi satu harus dijalankan pada mesin lain (Mengambil dan/atau update data, dapatkan penawaran saham dari layanan keuangan, dll.). Jika itu's pada mesin yang terpisah itu ada di thread terpisah, apakah sinkron atau asinkron.
Dalam istilah sederhana:
SINKRON
Anda berada dalam antrian untuk mendapatkan tiket film. Anda tidak bisa mendapatkan satu sampai semua orang di depan anda mendapat satu, dan yang sama berlaku untuk orang-orang yang antri di belakang anda.
ASYNCHRONOUS
Anda berada di sebuah restoran dengan banyak orang lain. Anda memesan makanan anda. Orang lain juga dapat memesan makanan mereka, mereka don't harus menunggu makanan yang akan dimasak dan disajikan kepada anda sebelum mereka dapat order. Di dapur restoran pekerja yang terus memasak, melayani, dan menerima pesanan. Orang-orang akan mendapatkan makanan mereka disajikan segera setelah dimasak.
Eksekusi Sinkron
Bos saya adalah orang yang sibuk. Dia memberitahu saya untuk menulis kode. Saya katakan padanya: baik-Baik saja. Saya memulai dan dia's menonton saya seperti burung pemakan bangkai, berdiri di belakang saya, dari bahu saya. I'm seperti "Bung, WTF: mengapa don't anda pergi dan melakukan sesuatu saat aku menyelesaikan ini?"
dia's seperti: "Tidak, aku'm menunggu di sini sampai anda selesai." Ini adalah sinkron.
Asynchronous Eksekusi
Bos menyuruh saya untuk melakukannya, dan daripada menunggu di sana untuk saya bekerja, bos pergi dan melakukan tugas-tugas lainnya. Ketika saya menyelesaikan pekerjaan saya, saya hanya melaporkan ke atasan saya dan berkata: "aku'm SELESAI!" Ini adalah Asynchronous Eksekusi.
(Saran saya: PERNAH bekerja dengan bos di belakang anda.)
Eksekusi sinkron berarti eksekusi terjadi dalam satu seri. A->B>C->A
. Jika anda menelepon mereka rutinitas, A
akan berjalan, kemudian selesai, maka B
akan mulai, kemudian selesai, maka C
akan mulai, dll.
Dengan Asynchronous eksekusi, anda mulai rutin, dan biarkan berjalan di latar belakang saat anda memulai anda berikutnya, maka di beberapa titik, mengatakan "tunggu ini selesai". It's lebih seperti:
Mulai A->B>C->D->
Menunggu untuk A
untuk menyelesaikan
Keuntungan adalah bahwa anda dapat melaksanakan B
, C
dan D
sementara A
masih berjalan (di latar belakang, di thread terpisah), sehingga anda dapat mengambil keuntungan dari sumber daya anda dan memiliki lebih sedikit "hang" atau "menunggu".
Sinkron berarti bahwa penelepon menunggu respon atau penyelesaian, asynchronous bahwa penelepon terus dan respon yang datang kemudian (jika berlaku).
Sebagai contoh:
static void Main(string[] args)
{
Console.WriteLine("Before call");
doSomething();
Console.WriteLine("After call");
}
private static void doSomething()
{
Console.WriteLine("In call");
}
Ini akan selalu ouput:
Before call
In call
After call
Tapi jika kita melakukan sesuatu yang membuat asynchronous (beberapa cara untuk melakukannya), maka output bisa menjadi:
Before call
After call
In call
Karena metode membuat panggilan asynchronous akan segera dilanjutkan dengan baris berikutnya kode. Saya mengatakan "mungkin", karena urutan eksekusi dapat't dapat dijamin dengan asynch operasi. Hal ini juga bisa melaksanakan seperti yang asli, tergantung pada benang timing, dll.
Singkatnya, sinkronisasi mengacu pada dua atau lebih proses' mulai dan end poin, TIDAK mereka eksekusi. Dalam contoh ini, Proses's endpoint disinkronkan dengan Proses B's start point:
SINKRON |--------A--------| |--------B--------|
Asynchronous proses, di sisi lain, tidak tidak telah mereka mulai dan titik akhir disinkronkan:
ASYNCHRONOUS |--------A--------| |--------B--------|
Di mana Proses Yang tumpang tindih Proses B, mereka're berjalan bersamaan atau serentak (definisi kamus), oleh karena itu kebingungan.
UPDATE: Charles Bretana peningkatan jawaban, jadi jawaban ini sekarang hanya sederhana (berpotensi disederhanakan) mnemonic.
Saya pikir ini adalah sedikit bulat-tentang penjelasan tapi masih menjelaskan dengan menggunakan contoh kehidupan nyata.
Contoh Kecil:
Let's mengatakan bermain audio melibatkan tiga langkah:
Jika pemutar audio anda melakukan langkah 1,2,3 secara berurutan untuk setiap lagu maka sinkron. Anda akan harus menunggu untuk beberapa waktu untuk mendengar lagu sampai lagu ini benar-benar akan diambil dan didekompresi.
Jika pemutar audio anda melakukan langkah 1,2,3 independen dari satu sama lain, maka itu adalah asinkron. ie. Saat bermain audio 1 ( langkah 3), jika mengambil audio 3 dari harddisk secara paralel (langkah 1) dan decompress audio 2 secara paralel. (langkah 2 ) Anda akan berakhir dalam mendengar lagu tanpa menunggu banyak untuk mengambil dan dekompresi.
Sinkron dan asinkron operasi di sekitar eksekusi kode order
Sinkron - berarti bahwa tugas-tugas yang akan dieksekusi satu per satu. Sebuah tugas berikutnya adalah mulai hanya sebelumnya selesai. Tugas B tidak dimulai sampai tugas Yang belum selesai
Asynchronous – jika disebut tugas tidak kembali akibat langsung tetapi memberikan kontrol untuk panggilan tugas dengan janji untuk mengeksekusi kode yang lebih baru(misalnya callback, fitur). Tugas B dijalankan bahkan jika tugas belum selesai
Hanya mengatakan eksekusi asynchronous adalah melakukan hal-hal di latar belakang.
Misalnya jika anda ingin men-download sebuah file dari internet, anda dapat menggunakan fungsi sinkron untuk melakukan itu, tetapi itu akan memblokir benang sampai file selesai di-download. Hal ini dapat membuat aplikasi anda tidak responsif terhadap input pengguna.
Sebagai gantinya anda bisa men-download file di latar belakang menggunakan metode asynchronous. Dalam hal ini fungsi download segera kembali dan eksekusi program akan berjalan normal. Semua download operasi yang dilakukan di latar belakang dan program anda akan diberitahu ketika itu's selesai.
Sebagai contoh yang sangat sederhana,
SINKRON
Bayangkan 3 siswa sekolah diinstruksikan untuk menjalankan estafet di jalan.
1 mahasiswa berjalan jarak tertentu, berhenti dan melewati tongkat untuk ke-2. Tidak ada orang lain telah mulai berjalan.
1------>
2.
3.
Ketika mahasiswa 2 mengambil tongkat, dia mulai menjalankan jarak tertentu.
1.
2------>
3.
2 siswa mendapat tali sepatu mengikat. Sekarang dia telah berhenti dan mengikat lagi. Karena ini, 2's akhirnya waktu telah mendapat diperpanjang dan ke-3's waktu mulai punya tertunda.
1.
--2.--->
3.
Pola ini terus berlanjut sampai ke-3 mengambil tongkat dari 2 dan selesai lomba.
ASYNCHRONOUS
Bayangkan saja 10 acak orang-orang yang berjalan di jalan yang sama. Mereka're tidak pada antrian saja, hanya secara acak berjalan di tempat yang berbeda di jalan di langkah yang berbeda.
2 orang's punya tali sepatu mengikat. Dia berhenti untuk mendapatkannya diikat lagi.
Tapi tidak ada yang menunggu untuk dia untuk mendapatkan itu diikat. Orang lain masih berjalan dengan cara yang sama mereka lakukan sebelum, pada saat yang sama laju mereka.
10--> 9-->
8--> 7--> 6-->
5--> 4-->
1--> 2. 3-->
Ketika menjalankan urutan-urutan seperti: a>b>c>a>, jika kita mendapatkan kegagalan di tengah-tengah eksekusi seperti:
a
b
c
fail
Kemudian kita mulai lagi dari awal:
a
b
c
d
ini adalah sinkron
Namun, jika kita memiliki urutan yang sama untuk melaksanakan: a>b>c>a>, dan kami telah gagal di tengah:
a
b
c
fail
...tapi bukannya restart dari awal, kami memulai kembali dari titik kegagalan:
c
d
...ini adalah tahu sebagai asynchronous.
Saya membuat gif untuk menjelaskan hal ini, berharap untuk dapat membantu: terlihat, baris 3 adalah asinkron dan lain-lain yang sinkron. semua baris sebelum baris 3 harus menunggu sampai sebelum garis finish bekerja, tetapi karena baris 3 adalah asynchronous, baris berikutnya (baris 4), don't menunggu untuk baris 3, tapi garis 5 harus menunggu untuk baris 4 untuk menyelesaikan pekerjaannya, dan line 6 harus menunggu baris 5 dan 7 untuk 6, karena garis 4,5,6,7 tidak asynchronous.
Anda membingungkan Sinkron dengan Paralel lebih baik dari Seri. Sinkron berarti semua pada waktu yang sama. Disinkronkan sarana yang terkait untuk masing-masing universitas yang dapat berarti secara seri atau pada interval yang tetap. Sedangkan program adalah melakukan semua itu, berjalan di seri. Dapatkan kamus...ini adalah mengapa kita memiliki unsweet teh. Anda memiliki teh atau teh manis.
Sinkron pada dasarnya berarti bahwa anda hanya bisa melakukan satu hal pada suatu waktu. Asynchronous berarti bahwa anda dapat menjalankan beberapa hal pada satu waktu dan anda don't harus selesai mengeksekusi hal yang saat ini dalam rangka untuk melanjutkan ke yang berikutnya.
Menggunakan contoh dari instruksi untuk membuat sarapan
Jika anda memiliki pengalaman memasak, anda'd mengeksekusi instruksi tersebut secara asinkron. anda'd mulai pemanasan panci untuk telur, kemudian mulai daging. Anda'd menempatkan roti dalam pemanggang, kemudian mulai telur. Pada setiap langkah dari proses, anda'd mulai tugas, kemudian mengalihkan perhatian anda untuk tugas-tugas yang siap untuk perhatian anda.
Memasak sarapan adalah sebuah contoh yang baik dari asynchronous pekerjaan yang isn't paralel. Satu orang (atau benang) dapat menangani semua tugas-tugas ini. Melanjutkan sarapan analogi, satu orang dapat membuat sarapan asynchronously dengan memulai tugas berikutnya sebelum yang pertama selesai. Memasak berlangsung apakah atau tidak seseorang menonton itu. Segera setelah anda mulai pemanasan panci untuk telur-telur ini, anda dapat mulai menggoreng daging. Setelah daging mulai, anda dapat menempatkan roti dalam pemanggang roti.
Untuk paralel algoritma, anda'd perlu beberapa koki (atau benang). Salah satu yang akan membuat telur, satu daging, dan sebagainya. Masing-masing akan fokus pada satu tugas. Setiap juru masak (atau benang) akan diblokir serentak menunggu daging siap untuk flip, atau roti panggang untuk pop.
Referensi dari Asynchronous konsep pemrograman
Berbeda dengan definisi bahasa inggris dari Sinkronisasi adalah di Sini
Koordinat; menggabungkan.
Saya pikir itu adalah definisi yang lebih baik dari "Terjadi pada waktu yang sama". Yang satu adalah juga definisi, tapi aku don't pikir itu adalah salah satu yang sesuai dengan cara yang digunakan dalam Ilmu Komputer.
Jadi asynchronous tugas ini tidak co-dikoordinasikan dengan tugas-tugas lain, sedangkan sinkron tugas co-dikoordinasikan dengan tugas-tugas lain, jadi satu selesai sebelum dimulai.
Bagaimana yang dicapai adalah pertanyaan yang berbeda.
Saya pikir cara yang baik untuk berpikir itu adalah klasik lari Estafet
Sinkron: Proses seperti anggota dari tim yang sama, mereka tidak't mengeksekusi sampai mereka menerima baton (akhir dari pelaksanaan sebelumnya proses/runner), namun mereka semua bertindak sinkron dengan satu sama lain.
Asynchronous: Mana proses seperti anggota dari tim yang berbeda pada saat yang sama relay race track, mereka akan berjalan dan berhenti, async dengan satu sama lain, tapi dalam ras yang sama (keseluruhan eksekusi program).
Apakah itu masuk akal?
Dalam hal "pada waktu yang sama" definisi eksekusi sinkron (yang kadang-kadang membingungkan), di sini's cara yang baik untuk memahami ini:
Sinkron Pelaksanaan: Semua tugas-tugas dalam blok kode semua dieksekusi pada waktu yang sama.
Asynchronous Pelaksanaan: Semua tugas-tugas dalam satu blok dari kode yang tidak dieksekusi pada waktu yang sama.