Pertanyaan Eksekusi asynchronous vs synchronous, apa artinya itu?


Apa perbedaan antara eksekusi asynchronous dan synchronous?


869
2018-04-14 15:39


asal


Jawaban:


Saat Anda menjalankan sesuatu secara bersamaan, Anda menunggu hingga selesai sebelum berpindah ke tugas lain. Ketika Anda menjalankan sesuatu secara asynchronous, Anda dapat melanjutkan ke tugas lain sebelum selesai.

Yang sedang berkata, dalam konteks komputer ini diterjemahkan ke dalam melaksanakan suatu proses atau tugas pada "utas" yang lain. Thread adalah serangkaian perintah (blok kode) yang ada sebagai unit kerja. Sistem operasi dapat mengelola beberapa utas dan menetapkan satu bagian benang ("slice") waktu prosesor sebelum beralih ke utas lain untuk memberikan giliran untuk melakukan beberapa pekerjaan. Pada intinya (mengampuni pun), prosesor hanya dapat menjalankan perintah, ia tidak memiliki konsep melakukan dua hal pada satu waktu. Sistem operasi mensimulasikan ini dengan mengalokasikan irisan waktu ke berbagai utas.

Sekarang, jika Anda memperkenalkan beberapa core / prosesor ke dalam campuran, maka hal-hal BISA benar-benar terjadi pada saat yang bersamaan. Sistem operasi dapat mengalokasikan waktu ke satu utas pada prosesor pertama, lalu mengalokasikan blok waktu yang sama ke utas lain 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 asynchronous adalah topik yang rumit karena semantik tentang bagaimana hal-hal saling terkait ketika Anda dapat melakukannya pada saat yang bersamaan. Ada banyak artikel dan buku tentang hal ini; lihatlah!


1360
2018-04-14 15:43



Synchronous / Asynchronous HAS APA-APA YANG HARUS DILAKUKAN DENGAN MULTI-THREADING.

Sinkron, atau Disinkronkan berarti "terhubung", atau "tergantung" dalam beberapa cara. Dengan kata lain, dua tugas sinkron harus menyadari satu sama lain, dan satu tugas harus dijalankan dengan cara tertentu yang bergantung pada yang lain, seperti menunggu untuk memulai hingga 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-berulir):

thread A -> |<---A---->|   
                        \  
thread B ------------>   ->|<----B---------->|   
                                              \   
thread C ---------------------------------->   ->|<------C----->| 

Asynchronous (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--------->|
  • Titik awal dan akhir tugas A, B, C diwakili oleh <, > karakter.
  • Irisan waktu CPU diwakili oleh bar vertikal |

Secara teknis, konsep sinkron / asynchronous benar-benar tidak ada hubungannya dengan benang. Meskipun, secara umum, tidak biasa untuk menemukan tugas asynchronous berjalan pada thread yang sama, itu mungkin, (lihat di bawah untuk contoh) dan itu adalah umum untuk menemukan dua atau lebih tugas yang dijalankan secara bersamaan terpisah benang ... Tidak, konsep sinkron / asinkron harus dilakukan hanya dengan apakah tugas kedua atau selanjutnya dapat dimulai sebelum tugas (pertama) lain selesai, atau apakah harus menunggu. Itu semuanya. Apa benang (atau benang), atau proses, atau CPU, atau memang, perangkat keras apa, tugas yang dijalankan tidak relevan. Memang, untuk membuat titik ini saya telah mengedit grafik untuk menunjukkan ini.

CONTOH ASIMRONUS. Dalam menyelesaikan banyak masalah rekayasa, perangkat lunak dirancang untuk membagi masalah keseluruhan menjadi beberapa tugas individual, dan kemudian jalankan secara asinkron. Membalikkan matriks, atau masalah analisis elemen hingga, adalah contoh yang baik. Dalam komputasi, menyortir daftar adalah contoh. Jenis rutin yang cepat, misalnya, membagi daftar menjadi dua daftar, dan mengurutkan masing-masing dengan memanggil dirinya secara rekursif. Dalam kedua contoh di atas, dua tugas dapat (dan sering) dijalankan secara asynchronous. Mereka tidak perlu berada di utas yang terpisah. Bahkan mesin dengan satu CPU, dan hanya satu thread eksekusi dapat dikodekan untuk memulai pemrosesan tugas kedua sebelum yang pertama selesai. Satu-satunya kriteria adalah itu hasil dari satu tugas tidak diperlukan sebagai masukan untuk tugas lainnya. Sepanjang waktu awal dan akhir dari tugas tumpang tindih, (mungkin hanya jika keluaran dari keduanya tidak diperlukan sebagai input ke yang lain), mereka sedang dijalankan secara asynchronous, tidak peduli berapa banyak thread yang digunakan.

CONTOH SYNCHRONOUS. Proses apa pun yang terdiri dari beberapa tugas di mana tugas harus dijalankan secara berurutan, tetapi harus dijalankan pada mesin lain (Ambil dan / atau perbarui data, dapatkan penawaran saham dari layanan keuangan, dll.). Jika pada mesin yang terpisah itu ada pada utas yang terpisah, apakah sinkron atau asinkron.


921
2018-04-14 15:53



Secara lebih sederhana:

SINKRONIS

Anda dalam antrean untuk mendapatkan tiket film. Anda tidak bisa mendapatkannya sampai semua orang di depan Anda mendapatkan satu, 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 harus 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 disajikan segera setelah dimasak.


519
2017-11-07 15:43



Saya akan mencoba menjelaskan sesederhana mungkin sehingga Anda akan (mudah-mudahan) mengingat:

Eksekusi Sinkron

Bos saya adalah orang yang sibuk. Dia memberitahuku untuk menulis kode. Saya katakan padanya: Baik. Saya memulai dan dia memperhatikan saya seperti burung hering, berdiri di belakang saya, dari pundak saya. Saya seperti "Dude, WTF: mengapa Anda tidak pergi dan melakukan sesuatu sementara saya menyelesaikan ini?"

dia seperti: "Tidak, aku menunggu disini sampai Anda selesai. "Ini sinkron.

Eksekusi tak sinkron

Bos menyuruh saya untuk melakukannya, dan daripada menunggu di sana untuk pekerjaan saya, bos pergi dan melakukan tugas lain. Ketika saya menyelesaikan pekerjaan saya, saya hanya melaporkan kepada atasan saya dan berkata: "Saya SELESAI!" Ini adalah Eksekusi Asynchronous.

Sesederhana itu! Semoga itu membantu.

(Ambil saran saya: JANGAN PERNAH bekerja dengan bos di belakang Anda.)


247
2018-06-08 11:13



Eksekusi sinkron berarti eksekusi terjadi dalam satu seri. A->B->C->D. Jika Anda menyebut rutinitas itu, A akan berjalan, lalu selesaikan, lalu B akan mulai, lalu selesaikan, kemudian Cakan mulai, dll.

Dengan Eksekusi asynchronous, Anda memulai rutinitas, dan membiarkannya berjalan di latar belakang saat Anda memulai berikutnya, lalu pada titik tertentu, katakan "tunggu sampai selesai". Ini lebih seperti:

Mulai  A->B->C->D->Tunggu untuk A menyelesaikan

Keuntungannya adalah Anda bisa mengeksekusi B, C, dan atau D sementara A masih berjalan (di latar belakang, pada utas yang terpisah), sehingga Anda dapat memanfaatkan sumber daya Anda dengan lebih baik dan memiliki lebih sedikit "hang" atau "menunggu".


73
2018-04-14 15:43



Sinkron berarti penelepon menunggu respons atau penyelesaian, asynchronous bahwa penelepon terus 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 ouput:

Before call
In call
After call

Tetapi jika kita melakukan doSomething asynchronous (beberapa cara melakukannya), maka hasilnya bisa menjadi:

Before call
After call
In call

Karena metode yang membuat panggilan asynchronous akan segera melanjutkan dengan baris kode berikutnya. Saya mengatakan "bisa", karena urutan eksekusi tidak dapat dijamin dengan operasi asynch. Bisa juga dieksekusi seperti aslinya, tergantung pada timing thread, dll.


46
2018-04-14 15:47



Saya pikir ini sedikit tentang penjelasan tetapi masih mengklarifikasi menggunakan contoh kehidupan nyata.

Contoh Kecil:

Katakanlah memainkan audio melibatkan tiga langkah:

  1. Mendapatkan lagu terkompresi dari harddisk
  2. Dekompresi audio.
  3. Mainkan audio yang tidak terkompresi.

Jika pemutar audio Anda melakukan langkah 1,2,3 secara berurutan untuk setiap lagu maka itu sinkron. Anda harus menunggu beberapa waktu untuk mendengar lagu sampai lagu benar-benar diambil dan didekompresi.

Jika pemutar audio Anda melakukan langkah 1,2,3 independen satu sama lain, maka itu asynchronous. yaitu. Saat memutar audio 1 (langkah 3), jika mengambil audio 3 dari harddisk secara paralel (langkah 1) dan dekompresi audio 2 secara paralel. (Langkah 2 ) Anda akan berakhir mendengar lagu tanpa menunggu banyak untuk mengambil dan dekompresi.


30
2018-04-14 16:27



Singkatnya, sinkronisasi mengacu pada dua atau lebih proses ' mulai dan akhir poin, TIDAK mereka eksekusi. Dalam contoh ini, titik akhir Proses A disinkronkan dengan titik awal Proses B:

SINKRONIS
   | -------- A -------- |
                     | -------- B -------- |

Proses asynchronous, di sisi lain, lakukan tidak mulai dan titik akhir mereka disinkronkan:

ASYNCHRONOUS
   | -------- A -------- |
         | -------- B -------- |

Di mana Proses A tumpang tindih dengan Proses B, mereka berjalan secara bersamaan atau serentak (definisi kamus), maka kebingungan.

UPDATE: Charles Bretana ditingkatkan jawabannya, jadi jawaban ini sekarang hanya mnemonik sederhana (berpotensi disederhanakan).


25
2017-08-17 14:11



Secara sederhana mengatakan eksekusi asynchronous adalah 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 thread Anda sampai file selesai diunduh. Ini dapat membuat aplikasi Anda tidak responsif terhadap masukan pengguna apa pun.

Sebagai gantinya Anda dapat mengunduh file di latar belakang menggunakan metode asynchronous. Dalam hal ini fungsi unduh akan segera kembali dan eksekusi program akan berjalan normal. Semua operasi pengunduhan dilakukan di latar belakang dan program Anda akan diberi tahu ketika selesai.


18
2018-04-14 15:41