Olay Tabanlı == Eşzamansız?

"Olay tabanlı", "senkronize olmayan" ile aynı mı?

4

3 cevap

Hayır, olayların asenkron olduğunu ima etmez.

Olay odaklı tek dişli sistemde, olayları tetikleyebilir, ancak hepsi seri olarak işlenir. İşlemlerinin bir parçası olarak ortaya çıkabilirler, ancak eşzamanlı olarak hiçbir şey olmaz , eğer verildiyse, işlemeyi durdururlar ve tekrar işlemeye başlamak için tekrar ileti alana kadar beklemek zorundadırlar.

Bunun örnekleri Swing (Java), Twisted (Python), Node.js (JavaScript), EventMachine (Ruby)

Bu örneklerin tümü olay odaklı mesaj döngüleridir, ancak hepsi tek iş parçacıklıdır, her olay aynı iş parçasındaki sonraki tüm olayları engeller.

Programlamada, asenkron olaylar ana program akışından bağımsız olarak gerçekleşenlerdir. Eşzamansız eylemler, engelleme olmayan bir şemada yürütülen eylemlerdir ve ana program akışının işleme devam etmesini sağlar.

So just because something is event driven doesn't make it asynchronous, and just because something is asynchronous doesn't make it event driven either; much less concurrent.

Node.js ön sayfasından @nickb "Düğüm, Ruby's Event Machine veya Python Twisted gibi sistemlere benzer ve etkilenmiştir." ve "Peki ya çok-işlemcili eşzamanlılık ne olacak? Programları çok çekirdekli bilgisayarlara ölçeklendirmek için gerekli iş parçacıkları değil mi? child_process.fork() yoluyla yeni süreçlere başlayabilirsiniz. Bu diğer işlemler paralel olarak programlanacaktır."
katma yazar feeling unwelcome, kaynak
Node.js aslında asenkron olduğunu düşündüm.
katma yazar nickb, kaynak

Bunlar aslında ortogonal kavramlardır.

" olay yönlendirmeli ", temel olarak, belirli işlev çağrılarıyla ilişkili kodun çalışma zamanında bağlandığı (ve yürütme sırasında değişebileceği) anlamına gelir. Olayı kimin "tetiklediği" ne işleyeceğini bilemez ve olayı kimin işlediği, program yürütülürken tanımlanan bir ilişki aracılığıyla olaya yanıt vermek için tanımlanır. Tipik olarak işlev işaretçileri, sanal yöntemleri taşıyan nesneler için referans veya işaretçiler vb.)

" eşzamansız ", bir program akışının, devam etmeden önce bir çağrının yürütülmesini beklemek zorunda kalmayacağı anlamına gelir (çoğunlukla, yürütmeyi başka bir iş parçacığına veya işleme devrettikten sonra hemen döndüren bir çağrıyla uygulanır)

Tüm olaylar eşzamansızdır (Windows SendMessage 'a, PostMessage ' a göre düşünün) ve tüm asenkron çağrıların "olaylar" tarafından uygulanması gerekmez (olayın kullanımı olmasına rağmen) mekanizma, asenkron çağrıları uygulamak için oldukça yaygındır.

3
katma

Eşzamansızlığın bir anlamı, bir hesaplama yaptığınız bir noktada, bir cevap beklememenizdir, ancak cevabı daha sonra alırsınız. Cevap normal kontrol akışınıza ortogonal olarak gelir.

Cevabın gerçekleşmesinin bir yolu, olayları kullanmaktır: Bu durumda, kodunuz onları tetiklemeden kendiliğinden gerçekleşir. Bir işleyicide sonucu işleyebilirsiniz.

Hesaplama ve cevap, senkronize mod için kontrol akışındaki noktaya bağlıyken, bağlantıyı kendiniz eşzamansız modda yapmanız gerekir. Örneğin bir sıra numarası veya bir şey kullanılarak.

0
katma