Asenkron ve senkron yürütme arasındaki fark nedir?
Asenkron ve senkron yürütme arasındaki fark nedir?
Yanıtlar:
Bir şeyi eşzamanlı olarak yürüttüğünüzde, başka bir göreve geçmeden önce bitmesini beklersiniz. Bir şeyi eşzamansız olarak yürüttüğünüzde, bitmeden önce başka bir göreve geçebilirsiniz.
Bununla birlikte, bilgisayarlar bağlamında bu, başka bir "iş parçacığı" üzerinde bir işlem veya görev yürütmeye dönüşür. İş parçacığı, bir iş birimi olarak var olan bir dizi komuttur (bir kod bloğu). İşletim sistemi birden fazla iş parçacığını yönetebilir ve başka bir iş parçacığına geçmeden önce bir iş parçasına bir parça ("dilim") atayabilir. Özünde (pardon pun), bir işlemci sadece bir komutu yürütebilir, bir seferde iki şey yapma kavramı yoktur. İşletim sistemi bunu farklı iş parçacıklarına zaman dilimleri ayırarak simüle eder.
Şimdi, karışıma birden fazla çekirdek / işlemci eklerseniz, işler aynı anda gerçekleşebilir. İşletim sistemi, ilk işlemci üzerindeki bir iş parçacığına zaman ayırabilir, ardından aynı zaman bloğunu farklı bir işlemci üzerindeki başka bir iş parçacığına ayırabilir. Tüm bunlar, kodunuzda devam edebilir ve başka şeyler yaparken işletim sisteminin görevinizin tamamlanmasını yönetmesine izin vermekle ilgilidir.
Eşzamansız programlama karmaşık bir konudur, çünkü aynı anda bunları yapabildiğinizde şeylerin nasıl birbirine bağlandığının semantiği. Konuyla ilgili çok sayıda makale ve kitap var; bir göz atın!
Senkron / Asenkron, ÇOK İPLİKLİ YAPILMAMASI GEREKENLER YOKTUR.
Senkronize veya Senkronize edilmiş bir şekilde "bağlı" veya "bağımlı" anlamına gelir. Başka bir deyişle, iki eşzamanlı görev birbirinin farkında olmalı ve bir görev diğerine bağımlı bir şekilde yürütülmelidir, örneğin diğer görev tamamlanana kadar başlamayı bekle.
Asenkron, tamamen bağımsız oldukları anlamına gelir ve hiçbiri diğerini başlangıçta veya infazda herhangi bir şekilde düşünmemelidir.
Senkron (bir iplik):
1 thread -> |<---A---->||<----B---------->||<------C----->|
Senkron (çok iş parçacıklı):
thread A -> |<---A---->|
\
thread B ------------> ->|<----B---------->|
\
thread C ----------------------------------> ->|<------C----->|
Asenkron (bir iplik):
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-->|
Asenkron (çok iş parçacıklı):
thread A -> |<---A---->|
thread B -----> |<----B---------->|
thread C ---------> |<------C--------->|
<
, >
karakterler.|
Teknik olarak, senkron / asenkron kavramının gerçekten ipliklerle bir ilgisi yoktur . Genel olarak, aynı iş parçacığında çalışan eşzamansız görevleri bulmak olağandışı olsa da, (örnekler için aşağıya bakın) mümkündür ve ayrı iş parçacıklarında eşzamanlı olarak yürütülen iki veya daha fazla görevi bulmak yaygındır ... Hayır, kavram eşzamanlı / eşzamansız, yalnızca ikinci veya sonraki bir görevin diğer (ilk) görev tamamlanmadan önce başlatılıp başlatılamayacağı veya beklenmesi gerekip gerekmediği ile ilgilidir. Hepsi bu. Hangi iş parçacığı (ya da iş parçacığı) ya da süreçleri ya da CPU'ları ya da aslında hangi donanımın / görevlerin yürütüldüğü önemli değildir. Gerçekten de, bu noktayı ortaya koymak için grafikleri bunu göstermek üzere düzenledim.
ASENKRON ÖRNEK:
Birçok mühendislik problemini çözerken, yazılım genel problemi çoklu bireysel görevlere bölmek ve daha sonra bunları eşzamansız olarak yürütmek için tasarlanmıştır. Bir matrisi veya sonlu elemanlar analiz problemini tersine çevirmek iyi örneklerdir. Hesaplamada, bir listeyi sıralamak bir örnektir. Örneğin, hızlı sıralama rutini listeyi iki listeye ayırır ve her biri üzerinde özyinelemeli (hızlı sıralama) olarak adlandırılan bir hızlı sıralama gerçekleştirir. Yukarıdaki örneklerin her ikisinde de, iki görev eşzamansız olarak yürütülebilir (ve çoğu zaman). Ayrı iplikler üzerinde olmaları gerekmez. Bir CPU ve sadece bir yürütme iş parçacığına sahip bir makine bile, ilk görev tamamlanmadan önce ikinci bir görevin işlenmesini başlatmak için kodlanabilir. Tek kriter, bir görevin sonuçlarının diğer göreve girdi olarak gerekli olmamasıdır. Görevlerin başlangıç ve bitiş zamanları çakıştığı sürece (yalnızca ikisinin çıktısı diğerine girdi olarak gerekli olduğunda mümkündür), kaç tane iş parçacığı kullanılırsa kullanılsın, eşzamansız olarak yürütülür.
SENKRON ÖRNEK:
Görevlerin sırayla yürütülmesi gereken, ancak bir işlemin başka bir makinede yürütülmesi gereken (birden fazla veri alma ve / veya güncelleme, finansal hizmetten hisse senedi alma, vb.) Yapılan tüm işlemler. Ayrı bir makinedeyse, eşzamanlı veya eşzamansız ayrı bir iş parçacığındadır.
Daha basit terimlerle:
SENKRON
Sinema bileti almak için sıradasınız. Önünüzdeki herkes bir tane alana kadar bir tane alamazsınız ve aynı şey arkanızda sıralanan insanlar için de geçerlidir.
ASENKRON
Diğer insanlarla bir lokantadasın. Yemeğini sipariş et. Diğer insanlar da kendi yemek sipariş edebilirsiniz, onlar sipariş önce gıda pişmiş ve size hizmet için beklemek zorunda değilsiniz. Mutfak restoranında işçiler sürekli yemek pişiriyor, hizmet veriyor ve sipariş alıyorlar. İnsanlar pişirilir pişirilmez yiyeceklerini servis edecekler.
Senkron Yürütme
Patronum meşgul bir adam. Bana kodu yazmamı söylüyor. Ona söylüyorum: Güzel. Başladım ve beni arkamda duran, omzumdan bir akbaba gibi izliyor. Ben "Dostum, WTF: Bunu bitirirken neden bir şey yapmıyorsun?"
"Hayır, bitirene kadar burada bekliyorum ." Bu zaman uyumludur.
Asenkron Yürütme
Patron bana bunu yapmamı söylüyor ve işim için orada beklemek yerine, patron gidiyor ve diğer görevleri yapıyor. İşimi bitirdiğimde, sadece patronuma rapor veriyorum ve "Tamamım!" Diyorum. Bu Asenkron Yürütmedir.
(Tavsiyemi al: ASLA arkandaki patronla çalışmayın.)
Senkron yürütme , yürütmenin tek bir seri halinde gerçekleştiği anlamına gelir. A->B->C->D
. Bu rutinleri çağırıyorsanız, A
çalışır, sonra biter, sonra B
başlar, sonra biter, sonra C
başlar vb.
Eşzamansız yürütme ile bir rutine başlarsınız ve bir sonrakine başlarken arka planda çalışmasına izin verirsiniz, ardından bir noktada "bunun bitmesini bekleyin" deyin. Daha çok şuna benzer:
Başlat Bitirmek için A->B->C->D->
bekleyinA
Avantajı yürütebileceği olmasıdır B
, C
ve ya D
da A
hala (ayrı bir iş parçacığı üzerinde, arka planda) çalışan Eğer kaynakların daha iyi yararlanmak ve daha az "askıda kalır" veya "bekler" olabilir, böylece.
Özetle, senkronizasyon iki veya daha fazla işlemin başlangıç ve bitiş noktalarını ifade eder, bunların yerine getirilmesini DEĞİLDİR . Bu örnekte, İşlem A'nın uç noktası İşlem B'nin başlangıç noktasıyla senkronize edilmiştir:
SENKRON | -------- A -------- | | -------- B -------- |
Asenkron süreçler ise başlangıç ve bitiş noktalarını senkronize etmez :
ASENKRON | -------- A -------- | | -------- B -------- |
Süreç A, Süreç B ile çakıştığında, eşzamanlı veya senkronize olarak çalışırlar (sözlük tanımı), dolayısıyla karışıklık olur.
GÜNCELLEME: Charles Bretana geliştirilmiş onun cevabını bu cevabı şimdi sadece basit (potansiyel olarak basitleştirilmiş) anımsatıcı yani.
Senkronize, arayanın yanıtı veya tamamlamayı beklediği, arayanın devam ettiği ve bir yanıtın daha sonra geldiği zaman (varsa) eşzamansız olduğu anlamına gelir.
Örnek olarak:
static void Main(string[] args)
{
Console.WriteLine("Before call");
doSomething();
Console.WriteLine("After call");
}
private static void doSomething()
{
Console.WriteLine("In call");
}
Bu her zaman çıkacaktır:
Before call
In call
After call
Ancak, doSomething'i eşzamansız hale getirseydik (bunu yapmanın birden çok yolu), çıktı olabilir :
Before call
After call
In call
Çünkü eşzamansız çağrıyı yapan yöntem hemen bir sonraki kod satırıyla devam edecektir. Ben "olabilir" diyorum, çünkü asenkron işlemlerle yürütme sırası garanti edilemez. İplik zamanlamalarına vb. Bağlı olarak orijinal olarak da çalışabilir.
Bunun biraz yuvarlak bir açıklama olduğunu düşünüyorum ama yine de gerçek hayat örneği kullanarak açıklığa kavuşuyor.
Küçük Örnek:
Diyelim ki bir ses çalmanın üç adımı var:
Ses çalarınız her şarkı için sırayla 1,2,3 adım yaparsa, eşzamanlıdır. Şarkı gerçekten alınıp açılana kadar şarkıyı dinlemek için biraz beklemeniz gerekecek.
Müzik çalarınız adım 1,2,3 birbirinden bağımsız olarak çalışıyorsa, eşzamansızdır. yani. Ses 1 (adım 3) oynatılırken, ses 3'ü sabit diskten paralel olarak alırsa (adım 1) ve ses 2'yi paralel olarak açar. (2. Adım) Getirme ve açma işlemlerini beklemeden şarkıyı dinleyeceksiniz.
Senkronizasyon ve zaman uyumsuz operasyonlar yürütme sipariş hakkında yeni iştir ilgili güncel göreve. Bir tabloda iki görev: geçerli görev ve yeni bir görev
Senkron (engelleme) - görevlerin tek tek yürütüleceğini belirtir. Bir sonraki görev ancak önceki görevi tamamlandıktan sonra başlatılır. Task 2
kadar başlamaz Task 1
bitti
Eşzamansız (engellemesiz) - görevin bir kodu yürütme ve sonucu daha sonra bildirme (örneğin, geri arama, özellik) sözü ile görevin hemen denetimi döndürdüğü anlamına gelir. bitmemiş Task 2
olsa bile yürütülürTask 1
Senkronizasyon ve zaman uyumsuzluk için SO yanıtı: iOS'ta , Android'de
Basitçe, eşzamansız yürütme arka planda bir şeyler yapıyor.
Örneğin, İnternet'ten bir dosya indirmek istiyorsanız, bunu yapmak için senkronize bir işlev kullanabilirsiniz, ancak dosya indirmeyi bitirene kadar iş parçacığınızı engeller. Bu, uygulamanızı herhangi bir kullanıcı girdisine yanıt vermeyebilir.
Bunun yerine, senkronize olmayan bir yöntem kullanarak dosyayı arka planda indirebilirsiniz. Bu durumda, indirme işlevi hemen geri döner ve program yürütme normal şekilde devam eder. Tüm indirme işlemleri arka planda yapılır ve programınız tamamlandığında bilgilendirilir.
Gerçekten basit bir örnek olarak,
SENKRON
3 okul öğrencisinin bir yolda bayrak yarışı yapmasını söylediklerini düşünün.
1. öğrenci verilen mesafeyi koşar, durur ve copu 2. sınıfa geçirir. Başka kimse koşmaya başlamadı.
1------>
2.
3.
2. öğrenci copu aldığında, verilen mesafeyi koşmaya başlar.
1.
2------>
3.
2. öğrenci ayakkabı bağını çözdü. Şimdi durdu ve tekrar bağlandı. Bu nedenle 2.'nin bitiş zamanı uzadı ve 3.'nin başlangıç zamanı ertelendi.
1.
--2.--->
3.
Bu desen, 3'üncü batonu 2'den alır ve yarışı bitirene kadar devam eder.
ASENKRON
Sadece aynı yolda yürüyen 10 rastgele insan hayal edin. Tabii ki kuyrukta değiller, sadece farklı hızlarda yolda farklı yerlerde rastgele yürüyorlar.
2. kişinin ayakkabı bağı çözüldü. Tekrar bağlanmak için durdu.
Ama kimse onu bağlamasını beklemiyor. Diğer herkes hala daha önce olduğu gibi yürüyor, aynı hızda.
10--> 9-->
8--> 7--> 6-->
5--> 4-->
1--> 2. 3-->
Bunu açıklamak için bir gif oluşturdum, yardımcı olmayı umuyorum: bak, hat 3 asenkron ve diğerleri senkron. satır 3'ten önceki tüm satırlar satır çalışmasını bitirene kadar beklemelidir, ancak satır 3 eşzamansız olduğundan, sonraki satır (satır 4), satır 3'ü beklemeyin, ancak satır 5 satır 4'ün işini bitirmesini beklemelidir, ve satır 6, 6 için satır 5 ve 7'yi beklemelidir, çünkü 4,5,6,7 satırı asenkron değildir.
Aşağıdaki gibi bir diziyi yürütürken, aşağıdaki gibi yürütmenin ortasında bir hata alırsak: a> b> c> d>:
a
b
c
fail
Sonra baştan başlıyoruz:
a
b
c
d
bu senkronize
Bununla birlikte, yürütmek için aynı sıraya sahipsek: a> b> c> d> ve ortada bir hata varsa:
a
b
c
fail
... ancak baştan başlamak yerine başarısızlık noktasından tekrar başlıyoruz:
c
d
... bu zaman uyumsuz olarak bilinir.
Paralel ve Seri ile Senkronize'yi karıştırıyorsunuz. Senkron ortalama aynı anda. Her biri ile ilgili seri veya sabit bir aralıkta olabilen senkronize edilmiş araçlar. Program her şeyi yaparken, seri olarak çalışır. Sözlük al ... bu yüzden tatlı çayımız var. Çay veya şekerli çayın var.
Eşzamanlı olarak, bir kerede yalnızca bir şeyi yürütebileceğiniz anlamına gelir. Asenkron, bir seferde birden fazla şeyi yürütebileceğiniz ve bir sonrakine geçmek için geçerli şeyi yürütmeyi bitirmek zorunda olmadığınız anlamına gelir.
Kahvaltı yapmak için bir talimat örneği kullanın
Yemek pişirme deneyiminiz varsa, bu talimatları eşzamansız olarak uygularsınız. tavayı yumurta için ısıtmaya başlayacak, sonra pastırmaya başlayacaksınız. Ekmeği ekmek kızartma makinesine koyun, sonra yumurtaları başlatın. Sürecin her adımında bir görev başlatır, sonra dikkatinizi dikkatinize hazır görevlere dönüştürürsünüz.
Kahvaltı yemek , paralel olmayan asenkron çalışmalara iyi bir örnektir . Bir kişi (veya iş parçacığı) tüm bu görevleri yerine getirebilir. Kahvaltı benzetmesine devam ederek, bir kişi ilk tamamlanmadan önce bir sonraki işe başlayarak eşzamansız kahvaltı yapabilir. Pişirme, birisinin onu izleyip izlemediğine göre ilerler. Yumurtalar için tavayı ısıtmaya başlar başlamaz pastırmayı kızartmaya başlayabilirsiniz. Pastırma başladığında, ekmeği ekmek kızartma makinesine koyabilirsiniz.
Paralel bir algoritma için birden fazla aşçıya (veya dişe) ihtiyacınız olacaktır. Biri yumurta, biri pastırma vb. Her biri sadece bir göreve odaklanacaktır. Her aşçı (veya iplik), pastırmanın dönmeye hazır olmasını veya tostun patlamasını bekleyen senkronize olarak bloke edilir.
Asenkron programlama kavramlarından referanslar
Senkronize bir işlem, arayan kişiye dönmeden önce işini yapar.
Zaman uyumsuz bir işlem, çağırana döndükten sonra işini (çoğu veya tamamı) yapar.
"Gelince aynı anda (bazen kafa karıştırıcı) senkron yürütme" tanımı, buradan anlamak için iyi bir yol:
Senkron Yürütme : Bir kod bloğundaki tüm görevlerin tümü aynı anda yürütülür.
Eşzamansız Yürütme : Bir kod bloğundaki tüm görevlerin tümü aynı anda yürütülmez.
Bunu düşünmenin iyi bir yolu klasik koşu Bayrak Yarışı Yarışı
Eşzamanlı : Aynı ekibin üyeleri gibi süreçler, baton alana kadar (önceki işlemin / koşucunun yürütülmesinin sonu), ancak hepsi birbiriyle senkronize davranana kadar yürütmezler.
Asenkron : Aynı bayrak yarışı pistinde farklı takımların üyeleri gibi süreçler olduğunda, birbirleriyle async, ancak aynı yarış içinde (genel program yürütme) çalışır ve dururlar.
Mantıklı geliyor?
Senkronize farklı bir ingilizce tanımıdır İşte
Koordinat; birleştirir.
Bunun "aynı anda olmaktan" daha iyi bir tanım olduğunu düşünüyorum. Bu da bir tanım, ama Bilgisayar Bilimlerinde nasıl kullanıldığını düşünmüyorum.
Dolayısıyla, eşzamansız bir görev diğer görevlerle koordine edilmezken, eşzamanlı bir görev diğer görevlerle koordine edilir, böylece biri diğeri başlamadan biter.
Bunun nasıl sağlandığı farklı bir sorudur.
Evet senkronize aynı zamanda, kelimenin tam anlamıyla, hep birlikte çalışmak anlamına gelir. Dünyadaki birden çok insan / nesne aynı anda birden fazla şey yapabilir, ancak bilgisayara bakarsak, süreçlerin birlikte çalıştığı senkronize araçlar anlamına gelir, bu da süreçlerin birbirlerinin geri dönüşüne bağlı olduğu anlamına gelir ve bu yüzden bir tane çalıştırılırlar birbiri ardına uygun sırada. Zaman uyumsuzluk, süreçlerin birlikte çalışmadığı anlamına gelirken, aynı anda (çoklu iş parçacığındaysa) çalışabilirler, ancak bağımsız olarak çalışırlar.