Bu ilginç bir soru. Eşzamanlı olmayan programlama, temel olarak tek bir iş parçacığı olan, yani bir "sürekli yürütme işleminin ardından" olan bir programlama paradigmasıdır.
Javascript bakın, bu nedenle bir web tarayıcısının ortamında bu dili tartışalım. Bir web tarayıcısı, her pencerede tek bir javascript çalıştırması iş parçacığı çalıştırır, olayları (onclick = "someFunction()") ve ağ bağlantılarını (örneğin xmlhttprequest çağrıları gibi) işler.
(012)
(Bu, yalnızca kavramların gösterilmesi için çalışmayan bir örnektir).
Her şeyi eşzamansız bir şekilde yapmak için, denetleyici iş parçacığı 'ana döngü' olarak bilinen bir şeye sahiptir. Bir ana döngü böyle tür görünür:
while (true) {
event = nextEvent(all_event_sources);
handler = findEventHandler(event);
handler(event);
}
bir 'meşgul döngü' olmadığına dikkat etmek önemlidir. Bu, faaliyetin gerçekleşmesini bekleyen uyku ipi gibidir. Etkinlik kullanıcıdan girilebilir (Fare Hareketi, Düğme Tıklaması, Yazma) veya ağ etkinliği olabilir (Sunucunun yanıtı).
findEventHandler() aralık etiketinin üzerinde onclick olayı bulacağını
yayılma tıkladığında, bir ButtonClicked olay yaratacağı
- Yani yukarıdaki örnekte
, ve daha sonra bu işleyici olacağını olay ile çağrıldı.
- xmlhttp isteği oluşturulduğunda, all_event_sources olay kaynakları listesine eklenir.
- performRequest() işlevi döndükten sonra, mainloop bir yanıtı bekleyen nextEvent() adımında bekler. Bu noktada, ele alınan diğer olayların “engellenmesi” hiçbir şey yoktur.
- Veriler uzak sunucudan geliyor, nextEvent() öğesi ağ olayını döndürüyor, olay işleyicisinin onreadystatechange() yöntemi olduğu, bu yöntemin çağrıldığı ve bir uyarı() iletişim kuralı tetikleniyor.
Uyarı() 'nın bir engelleme iletişim kutusu olduğunu belirtmek gerekir. Bu diyalog açıkken, başka hiçbir etkinlik işlenemez. Web sayfalarının javascript modelinin bir eksantrikliği, bu sayfa bağlamında daha fazla yürütmeyi engelleyecek hazır bir yönteme sahibiz. Özellikle JavaScript hakkında
cevabının cevabının bir düzeltmesini öneririm "Bu değersizdir" 'dan farklıdır, bu sizin niyetiniz olduğunu düşündüğüm noTing değerine sahiptir ". Sadece okuyucular için kafa karışıklığını önlemek için – MadMurf
@MadMurf: Ben de fark ettim .... ve düzeltdim. – mpen
>> Asenkron programlama, temel olarak tek dişli olan bir programlama paradigmasıdır << - Burada akılda kalmamaya çalışıyorum, fakat bu ifadenin nasıl doğru olduğunu göremiyorum. Eşzamansız programlama, tekil ve çoklu olarak tek başına bırakılan parçacıklar hakkında herhangi bir şey ima eder mi? – Lee