Eşzamansız ve eşzamanlı yürütme, gerçekten ne anlama geliyor? [kapalı]


1186

Asenkron ve senkron yürütme arasındaki fark nedir?


... veya "sıralı veya paralel" yürütme ... gerçek paralellik birden fazla çekirdek gerektirse de, aksi takdirde mantıksal olarak serpiştirilir.
samis

8
Her iki terimi de karıştırırdım ve farkı hatırlamak için yaptığım şey , bir döngüde AJAX ile istekte bulunduğunuzda JavaScript'te, eşzamansız anlamına gelen " A JAX" da ilk "A" yı atmaktır. tarayıcı donmuş bir web sitesindeki kullanıcı deneyimini etkilemek istemediğinden, tüm istekler önceki isteğin yanıtını beklemeden neredeyse aynı anda gönderilir. Bu eşzamansız
Muhasebeci م

Yanıtlar:


1747

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!


246
Beni kesinlikle şaşırtan şey, eşzamanlı "aynı zamanda" anlamına gelir, yine de yukarıdaki anlamda kullanıldığında, sıralı ve eşzamansız "aynı zamanda değil" anlamına gelir ... ?? Birisi bu çatışmayı açıklayabilir mi?
Damien Roche

45
@Zenph: Bu bağlamda, tüm kod bloğu endişe duyduğumuz şeydir. Senkron, bloğun aynı anda yürütüldüğü anlamına gelir (yine de evet, bileşenler sırayla yürütülür). Asenkron, bloğun hepsinin aynı anda yürütülmediği anlamına gelir.
Adam Robinson

8
Bir program bir kuyruğa (ActiveMQ, WebSphere MQ, HornetQ, MSMQ vb. Mesajlaşma sistemlerinde olduğu gibi) bir mesaj gönderdiğinde eşzamansız yürütme de gerçekleşir. Bu durumda, eşzamansız çağrı, işletim sistemi düzeyinde çok iş parçacıklı programlama veya eşzamanlı işlemeyi içermez.
Paulo Merson

287
Garip bir şekilde "Eşzamanlı", "aynı saati kullanarak" anlamına gelir, bu nedenle iki komut eşzamanlı olduğunda aynı saati kullanır ve birbiri ardına gerçekleşmelidir. "Eşzamansız", "aynı saati kullanmamak" anlamına gelir, bu nedenle talimatlar birbiriyle adım adım ilgilenmemektedir. Bu yüzden geriye bakar, terim talimatlar birbiriyle olan ilişkisinden bahsetmez. Saatle ilgili her talimat ilişkisine atıfta bulunuyor. Umarım yardımcı olur.
Tom Padilla

14
Terimler mühendislikten gelir. en.wikipedia.org/wiki/Asynchronous_system
Tom Padilla

1151

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--------->|
  • Başlangıç ve A, B, C ile gösterilen görevlerin bitiş noktaları <, >karakterler.
  • Dikey çubuklarla temsil edilen CPU zaman dilimleri |

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.


92
neden dünyada kelimeler bilgisayardaki farklı şeyler ifade ediyor ... her zaman beni buna geri dönmeme izin verin ... sözlükten .. eşzamanlı: aynı anda meydana geliyor . eşzamansız: aynı anda meydana gelmez.
Muhammad Umer

17
ancak bilgisayarlarda gördüğünüz gibi tam tersi
Muhammed Umer

5
Belki de isimlendirme, görevlerin başlatılmasının diğer görevlerin tamamlanmasıyla "senkronize edilmesine" dayanmaktadır?
Charles Bretana

11
@MuhammadUmer: bilgisayar dünyasında, aynı zamanda meydana gelen eşzamanlılık denir.
Roy Ling

5
IMHO, bu resimlerin hepsi eşzamanlı ve eşzamansız görevlerin yürütülmesini tanımlamaz Örneğin, ikinci resim eşzamansız görevlerin birkaç iş parçacığı gerektirdiğini gösterir. Aslında öyle değil. Ve bu görevlerin paralel çalışması gerekiyor, bu da bir gereklilik değil. Ya da, "eşzamanlı" için resim çok iyi görevlerin bazı çağrı sitesinde nasıl eşzamansız olarak gönderildiğini gösterir ve şimdi bir seri görev zamanlayıcıda yürütülür;) IMO, resimler yanıltıcı.
CouchDeveloper

641

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.


10
Birisi elma ile karşılaştırıldığında elma isterse; restoran senaryosunun eşzamanlı olmasını istiyorsanız, o zaman yemek siparişi verdiğinizde, restorandaki herkes yiyeceklerini vb. sipariş vermeden önce yiyeceklerinizin gelmesini beklemek zorunda kalacaktı. Şimdi bu gerçekten aptalca bir senaryo gibi görünüyor, ancak bilgi işlem dünyasında bu senaryo faydalı olabilir. Her müşterinin istediklerine karar veremediğini ve bunun yerine önceki müşterinin bunu isteyip istemediğine karar vermek için ne istediğine bakmak istediğini söyleyin, o zaman sipariş vermeden önce yiyeceklerin gelmesini beklemek zorunda oldukları mantıklıdır.
Fonix

Sadece eklemek için ... bu Asynchronous işlemlerinde bir kuyruk gibi işlemleri yürütmek olabilir ... Ama bu zorunlu değildir.
Sreekanth Karumanaghat

5
çok basit ve gerçek hayat örneği
Manish

Örneğinizi daha da ileriye taşımak için bilet satmak için birkaç kapı düşünebilirler. Bu nedenle, her satır diğer satırdan eşzamansız olarak, ancak kendi içinde eşzamanlı olarak çalışabilir!
Saeed Ahadian

334

Analoji ile Basit Açıklama

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.)


28
Ben YAPILDIĞIM ... bunu bir istifa olarak aldığınızda daha da komik.
Daedric

91

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 Bbaşlar, sonra biter, sonra Cbaş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, Cve ya Dda Ahala (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.


@ Reed Copsey ...... Böyle iyi bir açıklama için teşekkürler ..... Async-Exec hakkında biraz daha bilgi istedim ...... Async Exec cevabınıza dayanarak .... Başlat A-> B-> C-> D-> A'nın bitmesini bekleyin ... Yani tüm A, B, C, D bir seferde başlar ...... ve A'nın bitmesini beklerler ..... B sadece A bittikten sonra bitirir ve B sonra B bitirir vs.? Yoksa B önce bitirir, sonra A bitirir mi?
Devrath

8
@Devrath İşlemler herhangi bir sırayla tamamlanabilir.
Reed Copsey

59

Ö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.


2
Charles Bretana yanıtının kopyası
Dinesh Saini

2
@DineshSaini - Diyagramım biraz farklı. Açıklık için, her iki durumda da A'yı B'nin üzerine yerleştirdim, başlangıç ​​ve bitiş noktalarının senkronize olup olmadığını vurguladım. Charles Bretana'nın diyagramı senkron süreçleri hiçbir şey "senkronize etmeden" sıralı olarak yerleştirir. ("Geliştirmek" için cevabının altında yorum yapacaktım, ama sadece yeni diyagramı göstermenin daha kolay olacağını fark ettim.)
entr0p3te

Harika diyagramlar. En üstteki SYNC'yi çağırmanın yolunun, üst diyagramdaki A'nın başlangıcı ve bitişinin, aynı zamanda, başka hiçbir olaya müdahale etmediği veya A'nın tamamlanmasına müdahale edemeyeceği anlamında etkili olduğunu düşünüyorum. Senkronizasyon, başlangıçta ve bitişine çok yakın olan CPU kayıtlarına eklemek gibi, gerçekte sözlük-senkronize olacak şekilde tek bir görevi ifade edebilir.
Dean Radcliffe

55

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.


34

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:

  1. Sıkıştırılmış şarkıyı sabit diskten almak
  2. Sesi açın.
  3. Sıkıştırılmamış sesi çalın.

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.


32

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 2kadar başlamaz Task 1bitti

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 2olsa bile yürütülürTask 1

Senkronizasyon ve zaman uyumsuzluk için SO yanıtı: iOS'ta , Android'de


Eşzamanlı çok iş parçacıklı örnekteki şema, eşzamanlı olarak yürütülen iş parçacıklarını mı gösteriyor?
samis

@ sαmosΛris düşünebilirsiniz İş parçacığını gösteren X ekseni gibi Konu
yoAlex5

X ekseni geleneksel olarak bir uzaysal boyut olarak kullanılır; zaman için t ekseni - algoritma karmaşıklığının analizinde bulunan önemli bir ayrım.
samis

23

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.


1
örneğin nasıl daha hızlı olacak. Sonunda, indirme süresi bitene kadar dosyayı oynatamazsınız. Açıklayabilir misin? Ben o zaman async anlamıyorum sanırım ve muhtemelen ben ama diğer süreç çalışırken (indirme alma) diğer adım veya süreç ne olurdu? Demek istediğim, uygulamanızda bu zaman uyumsuz işlemi (indir) geri alana kadar ne yapabilirsiniz? Anlayamıyorum. Peki ne, hala kullanıcıya her iki durumda da ne tür bir bekleme mekanizması göstermek zorunda kalacaksınız?
PositiveGuy

4
Daha hızlı olması gerekmiyor. Ana iş parçacığını engellememekle ilgilidir, böylece diğer kullanıcı girişlerini işleyebilir. Örneğin, kullanıcı indirmeyi iptal etmek veya aynı anda başka bir dosya indirmeye başlamak isteyebilir.
Michał Piaskowski

19

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-->

18

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. hat 3 eşzamansız, diğerleri eşzamanlı


12

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.


1
Lütfen örneklerinize daha fazla bağlam sağlayarak ne demek istediğiniz konusunda daha hassas olabilir misiniz
krichard

5
Bu cevap doğru değil.
user207421

7

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.


3
Aslında, "senkronize" talimatlar ve saat arasındaki ilişkiyi ifade eder. Talimatlar kendileri arasındaki ilişki DEĞİL. Bu yüzden geriye doğru "senkron" görünüyor aslında birbiri ardına anlamına gelir: ama talimatlar saate SENKRONİZE EDİLMİŞTİR. "Eşzamansız", "herhangi bir zamanda, ne zaman gerçekleştiği umurumda değil" anlamına gelir: talimatların saatle senkronize edilmesi gerekmez. Evet, bir sözlük tanımı var, ancak doğru durumu tanımladığınızdan emin olmalısınız.
Tom Padilla

1
Senkron yok değil hesaplarken 'aynı anda tüm' anlamına gelir. Senkronizasyonu senkronize, 'paralel ve seri' çay ve tatlı çay ile karıştırıyorsunuz. Cevap hiç mantıklı değil.
user207421

7

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.


Eşzamanlı değil, birden çok şey aynı anda birden çok iş parçacığı olarak adlandırılmaz.
Sreekanth Karumanaghat

7

Kahvaltı yapmak için bir talimat örneği kullanın

  1. Bir fincan kahve dök.
  2. Bir tavayı ısıtın, sonra iki yumurtayı kızartın.
  3. Üç dilim pastırma kızartın.
  4. İki parça ekmek kızartın.
  5. Tosta tereyağı ve reçel ekleyin.
  6. Bir bardak portakal suyu dökü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


4

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.


bağlantı öldü.
HopefullyHelpful

1

"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.


Ben .. Ben downvote işler o yanlış beyanı için olduğunu düşünüyorum 'pratik amaçlar için' sen 'aynı anda etkin bir şekilde' dersem daha buna katılıyor, ya da olur aslında aynı tiem olarak yaptırılır.
Dean Radcliffe

1

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?


1

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.


0

Eşzamanlı, sıralı yürütmenin tek tek gerçekleştirileceği anlamına gelir. Hedeflerine teker teker araçla ulaşmak için sadece arkadaş arasında paylaşılması gereken bir araç olduğunu varsayalım.
Eşzamansız durumda, her arkadaş kiralanmış araç alabilir ve gideceği yere ulaşabilir.


0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.