Apa perbedaan antara eksekusi asinkron dan sinkron?
Apa perbedaan antara eksekusi asinkron dan sinkron?
Jawaban:
Saat Anda menjalankan sesuatu secara serempak, Anda menunggu sampai selesai sebelum pindah ke tugas lain. Saat Anda menjalankan sesuatu secara tidak sinkron, Anda dapat beralih ke tugas lain sebelum selesai.
Yang sedang berkata, dalam konteks komputer ini diterjemahkan menjadi mengeksekusi proses atau tugas pada "utas" lainnya. Utas adalah serangkaian perintah (blok kode) yang ada sebagai unit kerja. Sistem operasi dapat mengelola beberapa utas dan menetapkan utas sepotong ("irisan") dari waktu prosesor sebelum beralih ke utas lain untuk memberikan giliran untuk melakukan pekerjaan. Pada intinya (maafkan kata-kata), sebuah prosesor dapat dengan mudah menjalankan perintah, ia tidak memiliki konsep melakukan dua hal sekaligus. Sistem operasi mensimulasikan ini dengan mengalokasikan irisan waktu ke utas yang berbeda.
Sekarang, jika Anda memasukkan beberapa core / prosesor ke dalam campuran, maka hal-hal BISA benar-benar terjadi pada saat yang sama. Sistem operasi dapat mengalokasikan waktu ke satu utas pada prosesor pertama, kemudian mengalokasikan blok waktu yang sama ke utas lainnya pada prosesor yang berbeda. Semua ini adalah tentang memungkinkan sistem operasi untuk mengelola penyelesaian tugas Anda sementara Anda dapat melanjutkan dalam kode Anda dan melakukan hal-hal lain.
Pemrograman asinkron adalah topik yang rumit karena semantik tentang bagaimana hal-hal saling berhubungan ketika Anda dapat melakukannya pada saat yang sama. Ada banyak artikel dan buku tentang masalah ini; lihat!
Sinkron / Asinkron TIDAK PUNYA DILAKUKAN DENGAN MULTI-THREADING.
Sinkron atau Disinkronkan berarti "terhubung", atau "tergantung" dalam beberapa cara. Dengan kata lain, dua tugas sinkron harus saling mengetahui, dan satu tugas harus dijalankan dengan cara yang bergantung pada yang lain, seperti menunggu untuk memulai sampai tugas lainnya selesai.
Asynchronous berarti mereka benar-benar independen dan tidak ada yang harus mempertimbangkan yang lain dengan cara apa pun, baik dalam inisiasi atau dalam eksekusi.
Sinkron (satu utas):
1 thread -> |<---A---->||<----B---------->||<------C----->|
Sinkron (multi-utas):
thread A -> |<---A---->|
\
thread B ------------> ->|<----B---------->|
\
thread C ----------------------------------> ->|<------C----->|
Asinkron (satu utas):
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 sinkron / asinkron benar - benar tidak ada hubungannya dengan utas . Meskipun, secara umum, tidak biasa untuk menemukan tugas asinkron berjalan pada utas yang sama, adalah mungkin, (lihat di bawah untuk contoh) dan adalah umum untuk menemukan dua atau lebih tugas yang dijalankan secara serempak pada utas yang terpisah ... Tidak, konsep sinkron / asinkron harus dilakukan hanya dengan apakah tugas kedua atau selanjutnya dapat dimulai sebelum tugas lain (pertama) selesai, atau harus menunggu. Itu semuanya. Apa utas (atau utas), atau proses, atau CPU, atau memang, perangkat keras apa, tugas yang dijalankan tidak relevan. Memang, untuk membuat poin ini saya telah mengedit grafik untuk menunjukkan ini.
CONTOH ASYNCHRONOUS:
Dalam memecahkan banyak masalah teknik, perangkat lunak ini dirancang untuk membagi masalah keseluruhan menjadi beberapa tugas individu dan kemudian menjalankannya secara tidak sinkron. Pembalikan matriks, atau masalah analisis elemen hingga, adalah contoh yang baik. Dalam komputasi, menyortir daftar adalah contohnya. Rutin quicksort, misalnya, membagi daftar menjadi dua daftar dan melakukan quicksort pada masing-masing, memanggil dirinya sendiri (quicksort) secara rekursif. Dalam kedua contoh di atas, dua tugas dapat (dan sering) dijalankan secara tidak sinkron. Mereka tidak perlu berada di utas terpisah. Bahkan mesin dengan satu CPU dan hanya satu utas eksekusi dapat dikodekan untuk memulai pemrosesan tugas kedua sebelum yang pertama selesai. Satu-satunya kriteria adalah bahwa hasil dari satu tugas tidak perlu sebagai input untuk tugas lainnya. Selama waktu mulai dan berakhirnya tugas tumpang tindih, (hanya mungkin jika output dari keduanya tidak diperlukan sebagai input ke yang lain), mereka dieksekusi secara tidak sinkron, tidak peduli berapa banyak utas yang digunakan.
CONTOH SINKRON:
Setiap proses yang terdiri dari beberapa tugas di mana tugas harus dieksekusi secara berurutan, tetapi satu harus dieksekusi di komputer lain (Ambil dan / atau perbarui data, dapatkan penawaran harga dari layanan keuangan, dll.). Jika berada di mesin yang terpisah itu berada di utas terpisah, apakah sinkron atau asinkron.
Secara sederhana:
SINKRONIS
Anda berada dalam antrian untuk mendapatkan tiket film. Anda tidak bisa mendapatkannya sampai semua orang di depan Anda mendapatkannya, dan hal 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 tidak perlu menunggu makanan Anda dimasak dan disajikan kepada Anda sebelum mereka dapat memesan. Di dapur restoran pekerja terus memasak, melayani, dan menerima pesanan. Orang-orang akan mendapatkan makanan mereka segera setelah dimasak.
Eksekusi Sinkron
Bos saya orang yang sibuk. Dia menyuruh saya untuk menulis kode. Saya katakan padanya: Baik. Saya memulai dan dia melihat saya seperti burung pemakan bangkai, berdiri di belakang saya, dari bahu saya. Saya seperti "Bung, WTF: mengapa Anda tidak pergi dan melakukan sesuatu saat saya menyelesaikan ini?"
dia seperti: "Tidak, saya menunggu di sini sampai Anda selesai." Ini sinkron.
Eksekusi Asinkron
Bos memberitahu saya untuk melakukannya, dan alih-alih menunggu di sana untuk pekerjaan saya, bos pergi dan melakukan tugas-tugas lain. Ketika saya menyelesaikan pekerjaan saya, saya hanya melaporkan kepada bos saya dan berkata: "Saya SELESAI!" Ini adalah Eksekusi Asinkron.
(Ambil saran saya: TIDAK PERNAH bekerja dengan bos di belakang Anda.)
Eksekusi sinkron berarti eksekusi terjadi dalam satu seri. A->B->C->D
. Jika Anda memanggil rutinitas itu, A
akan berjalan, lalu selesai, lalu B
akan mulai, lalu selesai, lalu C
akan mulai, dll.
Dengan eksekusi Asynchronous , Anda memulai rutinitas, dan membiarkannya berjalan di latar belakang saat Anda memulai berikutnya, kemudian di beberapa titik, katakan "tunggu sampai ini selesai". Ini lebih seperti:
Mulai A->B->C->D->
Tunggu untuk A
sampai akhir
Keuntungannya adalah bahwa Anda dapat mengeksekusi B
,, C
dan atau D
saat A
masih berjalan (di latar belakang, pada utas terpisah), sehingga Anda dapat mengambil keuntungan lebih baik dari sumber daya Anda dan memiliki lebih sedikit "hang" atau "menunggu".
Singkatnya, sinkronisasi mengacu pada dua titik awal dan akhir proses , BUKAN milik mereka eksekusi . Dalam contoh ini, titik akhir Proses A disinkronkan dengan titik awal Proses B:
SINKRONIS | -------- A -------- | | -------- B -------- |
Proses asinkron, di sisi lain, tidak memiliki awal dan titik akhir mereka disinkronkan:
ASYNCHRONOUS | -------- A -------- | | -------- B -------- |
Di mana Proses A tumpang tindih Proses B, mereka berjalan bersamaan atau serempak (definisi kamus), maka kebingungan.
UPDATE: Charles Bretana meningkatkan jawabannya , jadi jawaban ini sekarang hanya mnemonik sederhana (berpotensi disederhanakan).
Sinkron berarti pemanggil menunggu respons atau penyelesaian, asinkron bahwa pemanggil berlanjut dan respons datang kemudian (jika ada).
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 muncul:
Before call
In call
After call
Tetapi jika kita membuat doSomething asynchronous (beberapa cara untuk melakukannya), maka hasilnya bisa menjadi:
Before call
After call
In call
Karena metode membuat panggilan asinkron akan segera melanjutkan dengan baris kode berikutnya. Saya katakan "bisa", karena urutan eksekusi tidak dapat dijamin dengan operasi asynch. Itu bisa juga dieksekusi seperti aslinya, tergantung pada timing thread, dll.
Saya pikir ini agak bulat tentang penjelasan tetapi masih mengklarifikasi menggunakan contoh kehidupan nyata.
Contoh kecil:
Katakanlah memainkan audio melibatkan tiga langkah:
Jika pemutar audio Anda melakukan langkah 1,2,3 secara berurutan untuk setiap lagu maka itu sinkron. Anda harus menunggu beberapa saat untuk mendengarkan lagu sampai lagu tersebut benar-benar diambil dan didekompresi.
Jika pemutar audio Anda melakukan langkah 1,2,3 independen satu sama lain, maka ia tidak sinkron. yaitu. Saat memutar audio 1 (langkah 3), jika ia mengambil audio 3 dari harddisk secara paralel (langkah 1) dan itu akan mendekompresi audio 2 secara paralel. (langkah 2) Anda akan berakhir dalam mendengarkan lagu tanpa menunggu terlalu banyak untuk mengambil dan mendekompres.
Sinkronisasi dan operasi async adalah tentang urutan eksekusi tugas baru dalam kaitannya dengan tugas saat ini. Dua tugas di atas meja: tugas saat ini dan tugas baru
Synchronous (blocking) - menyiratkan bahwa tugas akan dieksekusi satu per satu. Tugas berikutnya dimulai hanya setelah tugas sebelumnya selesai. Task 2
tidak dimulai sampai Task 1
selesai
Asynchronous (non-blocking) - menyiratkan bahwa tugas mengembalikan kontrol segera dengan janji untuk mengeksekusi kode dan memberitahukan tentang hasil nanti (misalnya panggilan balik, fitur). Task 2
dieksekusi meskipun Task 1
tidak selesai
JADI jawaban tentang sinkronisasi dan asinkron: di iOS , di Android
Secara sederhana, eksekusi asinkron melakukan hal-hal di latar belakang.
Misalnya jika Anda ingin mengunduh file dari internet, Anda mungkin menggunakan fungsi sinkron untuk melakukan itu, tetapi itu akan memblokir utas Anda sampai file selesai diunduh. Ini dapat membuat aplikasi Anda tidak responsif terhadap input pengguna apa pun.
Alih-alih, Anda dapat mengunduh file di latar belakang menggunakan metode asinkron. Dalam hal ini fungsi unduhan segera kembali dan eksekusi program berlanjut secara normal. Semua operasi pengunduhan dilakukan di latar belakang dan program Anda akan diberi tahu saat selesai.
Sebagai contoh yang sangat sederhana,
SINKRONIS
Bayangkan 3 siswa sekolah diperintahkan untuk menjalankan lomba lari estafet di jalan.
Murid 1 berlari jaraknya, berhenti dan melewati tongkat ke 2. Tidak ada orang lain yang mulai berjalan.
1------>
2.
3.
Ketika siswa ke-2 mengambil tongkat, dia mulai berlari jarak yang diberikan.
1.
2------>
3.
Siswa ke-2 melepaskan tali sepatunya. Sekarang dia sudah berhenti dan mengikat lagi. Karena itu, waktu akhir ke-2 telah diperpanjang dan waktu mulai ke-3 telah tertunda.
1.
--2.--->
3.
Pola ini berlanjut hingga yang ketiga mengambil tongkat dari 2 dan menyelesaikan lomba.
ASYNCHRONOUS
Bayangkan saja 10 orang acak berjalan di jalan yang sama. Mereka tidak berada dalam antrian tentu saja, hanya berjalan secara acak di tempat yang berbeda di jalan dalam langkah yang berbeda.
Tali sepatu orang ke-2 terlepas. Dia berhenti untuk mengikatnya lagi.
Tapi tidak ada yang menunggunya diikat. Semua orang masih berjalan dengan cara yang sama seperti yang mereka lakukan sebelumnya, dengan kecepatan yang sama dengan mereka.
10--> 9-->
8--> 7--> 6-->
5--> 4-->
1--> 2. 3-->
Saya membuat gif untuk menjelaskan ini, berharap dapat membantu: lihat, baris 3 asinkron dan yang lainnya sinkron. semua baris sebelum baris 3 harus menunggu sampai sebelum garis menyelesaikan pekerjaannya, tetapi karena baris 3 tidak sinkron, baris berikutnya (baris 4), jangan menunggu baris 3, tetapi baris 5 harus menunggu baris 4 untuk menyelesaikan pekerjaannya, dan baris 6 harus menunggu baris 5 dan 7 untuk 6, karena baris 4,5,6,7 tidak asinkron.
Saat menjalankan urutan seperti: a> b> c> d>, jika kita mengalami kegagalan di tengah eksekusi seperti:
a
b
c
fail
Kemudian kita mulai lagi dari awal:
a
b
c
d
ini sinkron
Namun, jika kita memiliki urutan yang sama untuk dieksekusi: a> b> c> d>, dan kita memiliki kegagalan di tengah:
a
b
c
fail
... tetapi alih-alih memulai kembali dari awal, kami memulai kembali dari titik kegagalan:
c
d
... ini dikenal sebagai tidak sinkron.
Anda bingung Sinkron dengan Seri Paralel vs. Sinkron artinya semua pada saat yang sama. Syncronized berarti terkait satu sama lain yang dapat berarti secara seri atau pada interval yang tetap. Sementara program sedang melakukan semua, itu berjalan secara seri. Dapatkan kamus ... ini sebabnya kami minum teh yang tidak manis. Anda memiliki teh atau teh manis.
Sinkron pada dasarnya berarti bahwa Anda hanya dapat menjalankan satu hal pada satu waktu. Asinkron berarti Anda dapat menjalankan banyak hal sekaligus dan Anda tidak harus menyelesaikan mengeksekusi hal yang sekarang untuk melanjutkan ke yang berikutnya.
Gunakan contoh instruksi untuk membuat sarapan
Jika Anda memiliki pengalaman memasak, Anda akan menjalankan instruksi tersebut secara tidak sinkron. Anda akan mulai menghangatkan wajan untuk telur, kemudian mulai bacon. Anda memasukkan roti ke dalam pemanggang, lalu memulai telur. Pada setiap langkah proses, Anda akan memulai tugas, lalu mengalihkan perhatian Anda ke tugas-tugas yang siap untuk perhatian Anda.
Memasak sarapan adalah contoh yang baik dari pekerjaan asinkron yang tidak paralel. Satu orang (atau utas) dapat menangani semua tugas ini. Melanjutkan analogi sarapan, satu orang dapat membuat sarapan tidak sinkron dengan memulai tugas berikutnya sebelum yang pertama selesai. Memasak berlangsung tanpa memperhatikan apakah seseorang menontonnya. Segera setelah Anda mulai menghangatkan wajan untuk telur, Anda bisa mulai menggoreng bacon. Setelah daging mulai, Anda bisa memasukkan roti ke dalam pemanggang.
Untuk algoritme paralel, Anda memerlukan beberapa koki (atau utas). Satu akan membuat telur, satu bacon, dan seterusnya. Masing-masing akan fokus hanya pada satu tugas itu. Setiap juru masak (atau utas) akan diblokir serentak menunggu bacon siap untuk dibalik, atau roti panggang menyembur.
Referensi dari konsep pemrograman Asynchronous
Operasi sinkron berfungsi sebelum kembali ke pemanggil.
Operasi asinkron berfungsi (sebagian besar atau semua) berfungsi setelah kembali ke pemanggil.
Berkenaan dengan definisi " pada saat yang sama " dari eksekusi sinkron (yang terkadang membingungkan), berikut adalah cara yang baik untuk memahaminya:
Eksekusi Sinkron : Semua tugas dalam satu blok kode semua dieksekusi pada waktu yang bersamaan.
Eksekusi Asinkron : Semua tugas dalam satu blok kode tidak semuanya dieksekusi pada saat yang sama.
Saya pikir cara yang baik untuk memikirkannya adalah lomba lari klasik
Sinkron : Proses seperti anggota tim yang sama, mereka tidak akan mengeksekusi sampai mereka menerima tongkat (akhir pelaksanaan proses / pelari sebelumnya) dan mereka semua bertindak sinkron satu sama lain.
Asinkron : Di mana proses seperti anggota tim yang berbeda di trek balap estafet yang sama, mereka akan berlari dan berhenti, asinkron satu sama lain, tetapi dalam ras yang sama (keseluruhan program eksekusi).
Apakah masuk akal?
Definisi bahasa Inggris yang berbeda dari Sinkronisasi adalah Di Sini
Koordinat; menggabungkan.
Saya pikir itu adalah definisi yang lebih baik daripada "Terjadi pada saat yang sama". Itu juga definisi, tapi saya tidak berpikir itu yang cocok dengan cara yang digunakan dalam Ilmu Komputer.
Jadi tugas asinkron tidak terkoordinasi dengan tugas-tugas lain, sedangkan tugas sinkron dikoordinasikan dengan tugas-tugas lain, jadi seseorang selesai sebelum yang lain dimulai.
Bagaimana hal itu dicapai adalah pertanyaan yang berbeda.
Sinkron berarti eksekusi jalan antrian satu per satu tugas akan dieksekusi. Misalkan hanya ada kendaraan yang perlu dibagikan di antara teman untuk mencapai tujuan mereka satu per satu kendaraan akan dibagikan.
Dalam kasus asinkron, setiap teman bisa mendapatkan kendaraan sewaan dan mencapai tujuannya.
Ya sinkron berarti pada saat yang sama, secara harfiah, artinya melakukan semua pekerjaan bersama. banyak manusia / benda di dunia dapat melakukan banyak hal sekaligus, tetapi jika kita melihat komputer, katanya berarti sinkron di mana proses bekerja bersama yang berarti proses bergantung pada pengembalian satu sama lain dan itulah mengapa mereka dieksekusi satu setelah yang lain dalam urutan yang benar. Sedangkan asinkron berarti di mana proses tidak bekerja bersama, mereka dapat bekerja pada saat yang sama (jika ada pada multithread), tetapi bekerja secara independen.