Eşzamansız yöntem çağrısı - Asynchronous method invocation
Çok iş parçacıklı bilgisayar programlamasında , eşzamansız yöntem çağrıları veya eşzamansız desen olarak da bilinen eşzamansız yöntem çağrısı ( AMI ), aranan kodun bitmesini beklerken arama sitesinin engellenmediği bir tasarım modelidir . Bunun yerine, cevap geldiğinde arayan iş parçacığı bilgilendirilir. Cevap için oylama istenmeyen bir seçenektir.
Arka fon
AMI , bir nesnenin potansiyel olarak uzun süre çalışan yöntemlerinin eşzamansız çağrılması için bir tasarım modelidir . 1996 yılında Allan Vermeulen tarafından açıklanan IOU ("Sana borçluyum") modeline eşdeğerdir.
Çoğu programlama dilinde, çağrılan bir yöntem eşzamanlı olarak, yani çağrıldığı yürütme sürecinde çalıştırılır . Yöntemin tamamlanması uzun zaman alırsa, örneğin internet üzerinden veri yüklediği için, çağıran iş parçacığı yöntem bitene kadar engellenir. Bu istenmediğinde, bir "işçi iş parçacığı" başlatmak ve oradan yöntemi çağırmak mümkündür. Çoğu programlama ortamında bu, özellikle çok sayıda iş parçacığı oluşturmanın neden olabileceği ek yükten kaçınmak için özen gösteriliyorsa, birçok kod satırı gerektirir. AMI, bu sorunu, potansiyel olarak uzun süre çalışan ("eşzamanlı") bir nesne yöntemini, hemen geri dönen "eşzamansız" bir varyantla ve tamamlanma bildirimini almayı veya tamamlanma için beklemeyi kolaylaştıran ek yöntemlerle zenginleştirerek çözer. daha sonra.
AMI'nin yaygın kullanımlarından biri, aktif nesne tasarım modelidir. Alternatifler, senkronize yöntem çağrısı ve gelecekteki nesnelerdir . AMI'yi kullanabilen bir uygulama örneği, tüm resimler yüklenmeden önce bir web sayfasını görüntülemesi gereken bir web tarayıcısıdır.
Yana yöntem özel bir durumdur prosedür , asenkron metot çağrımı özel bir durumdur uyumsuz yordam çağrısı .
Uygulamalar
Java sınıfı
İçinde FutureTask sınıf Java kullanımı olaylar aynı sorunu çözmek için. Bu model, uygulaması daha fazla ek yük taşıyan bir AMI varyantıdır, ancak yazılım bileşenlerini temsil eden nesneler için kullanışlıdır .
.NET Framework
- Eşzamansız Programlama Modeli (APM) kalıbı (.NET Framework 2.0'dan önce kullanılır)
- Olay Tabanlı Eşzamansız Desen (EAP) (.NET Framework 2.0'da kullanılır)
- Görev Tabanlı Eşzamansız Desen (TAP) (.NET Framework 4.0'da kullanılır)
Misal
Aşağıdaki örnek, genel olarak .NET Framework'te kullanılan standart bir AMI stiline dayanmaktadır . Bir yöntem verildiğinde Accomplish , iki yeni yöntem eklenir BeginAccomplish ve EndAccomplish :
class Example
{
Result Accomplish(args …)
IAsyncResult BeginAccomplish(args …)
Result EndAccomplish(IAsyncResult a)
…
}
Çağrının ardından BeginAccomplish , istemci hemen AsyncResult ( IAsyncResult arabirimi uygulayan ) tipte bir nesne alır , böylece çağrıyı ilgisiz çalışmayla devam ettirebilir. En basit durumda, nihayetinde böyle bir iş EndAccomplish kalmaz ve müşteri , yöntem tamamlanana ve sonuç elde edilene kadar bloke eden (önceden alınan nesneyi ileten) çağırır . AsyncResult Nesne normalde en azından uzun süren bir yöntem tamamlanmış olup olmadığı terimi müşteri sağlayan bir yöntem sağlar:
interface IAsyncResult
{
bool HasCompleted()
…
}
Ayrıca BeginAccomplish , uzun süre çalışan yöntem tamamlandığında çağrılacak bir geri çağrı yöntemine de geçilebilir. Genellikle EndAccomplish uzun süre çalışan yöntemin dönüş değerini elde etmeyi çağırır . Geri arama mekanizmasındaki bir sorun, geri arama işlevinin doğal olarak çalışan iş parçacığında (orijinal çağıran iş parçacığı yerine) çalıştırılmasıdır, bu da yarış koşullarına neden olabilir.
.NET Framework belgelerinde, olay tabanlı eşzamansız desen terimi, AccomplishAsync yerine adında bir yöntem kullanan alternatif bir API stilini (.NET 2.0'dan beri mevcuttur) ifade eder BeginAccomplish . Yüzeysel bir fark, bu stilde uzun süre çalışan yöntemin dönüş değerinin doğrudan geri arama yöntemine aktarılmasıdır. Daha da önemlisi, API , çağrıldığı AccomplishCompleted aynı iş parçacığı içinde geri çağrı yöntemini (türü bir olay nesnesinde bulunan ) çalıştırmak için özel bir mekanizma kullanır BeginAccomplish . Bu, yarış koşulları tehlikesini ortadan kaldırarak API'nin kullanımını kolaylaştırır ve yazılım bileşenleri için uygun hale getirir; diğer yandan modelin bu uygulaması, ek nesne oluşturma ve senkronizasyon ek yükü ile birlikte gelir.
Referanslar
- ^ "Eşzamansız Yöntem Çağrısı" . Buz ile Dağıtılmış Programlama . ZeroC, Inc. 5 Ocak 2008 tarihinde orjinalinden arşivlendi . Erişim tarihi: 22 Kasım 2008 .
- ^ Vermeulen, Allan (Haziran 1996). "Eşzamansız Tasarım Modeli" . Dr. Dobb's Journal . Erişim tarihi: 22 Kasım 2008 .
- ^ Nash, Trey (2007). "C # içinde iş parçacığı". Hızlandırılmış C # 2008 . Apress. ISBN 978-1-59059-873-3 .
-
^ Lavanta, R. Greg; Douglas C. Schmidt . "Aktif Nesne" (PDF) . Arşivlenmiş orijinal (PDF) 2012-09-24 tarihinde . Erişim tarihi: 22 Kasım 2008 . Alıntı günlüğü gerektirir
|journal=( yardım ) - ^ "Sınıf FutureTask" . Oracle. 2011. 2013-06-25 tarihinde orjinalinden arşivlendi . Erişim tarihi: 2015-06-29 .
- ^ "Eşzamansız Programlama Modeli" . Microsoft. 2015 . Erişim tarihi: 2015-06-29 .
- ^ "Olay Tabanlı Asenkron Modele Genel Bakış" . Microsoft. 2015 . Erişim tarihi: 2015-06-29 .
- ^ "Görev Tabanlı Eşzamansız Model" . Microsoft. 2015 . Erişim tarihi: 2015-06-29 .
- ^ "Eşzamansız Programlama Tasarım Modelleri" . .NET Framework Geliştirici Kılavuzu . Microsoft Geliştirici Ağı. 22 Kasım 2008 tarihinde orjinalinden arşivlendi . Erişim tarihi: 22 Kasım 2008 .
- ^ "Eşzamansız Programlamaya Genel Bakış" . .NET Framework Geliştirici Kılavuzu . Microsoft Geliştirici Ağı. 7 Aralık 2008 tarihinde orjinalinden arşivlendi . Erişim tarihi: 22 Kasım 2008 .
- ^ "Eşzamansız Bir İşlemi Sonlandırmak İçin AsyncCallback Temsilcisi Kullanma" . .NET Framework Geliştirici Kılavuzu . Microsoft Geliştirici Ağı. 23 Aralık 2008 tarihinde orjinalinden arşivlendi . Erişim tarihi: 22 Kasım 2008 .
- ^ "Eşzamanlılık Sorunları" . Buz ile Dağıtılmış Programlama . ZeroC, Inc. 28 Mart 2008 tarihinde orjinalinden arşivlendi . Erişim tarihi: 22 Kasım 2008 .
- ^ Christian Nagel; Bill Evjen; Jay Glynn; Karli Watson ve Morgan Skinner (2008). "Olay Tabanlı Asenkron Model". Profesyonel C # 2008 . Wiley. s. 570 –571. ISBN 9780470191378 .
- ^ "Olay Tabanlı Eşzamansız Model ile Çok İş Parçacıklı Programlama" . .NET Framework Geliştirici Kılavuzu . Microsoft Geliştirici Ağı. 25 Aralık 2008 tarihinde orjinalinden arşivlendi . Erişim tarihi: 22 Kasım 2008 .
- ^ "Olay Tabanlı Eşzamansız Modelin Ne Zaman Uygulanacağına Karar Verme" . .NET Framework Geliştirici Kılavuzu . Microsoft Geliştirici Ağı. 22 Kasım 2008 tarihinde orjinalinden arşivlendi . Erişim tarihi: 22 Kasım 2008 .
daha fazla okuma
- Chris Sells ve Ian Griffiths (2007). "Ek C.3: Olay Tabanlı Asenkron Model". WPF'yi programlama . O'Reilly. s. 747 –749. ISBN 9780596510374 .
- C # 'da zaman uyumsuz yöntem çağrılarını kullanma