非同步方法呼叫
非同步方法呼叫或非同步方法模式是(多線程)物件導向程式設計中用於非同步呼叫對象的潛在的長期執行方法的一種設計模式[1]。它等價於Allan Vermeulen提出的IOU模式[2][3]。
基於事件的非同步模式是非同步方法呼叫的一個變種,開銷更大但能更好的表現軟件組件對象。.NET框架和Java中的java.util.concurrent.FutureTask
類別中使用的基於事件的非同步模式使用事件來解決同樣的問題。
大部分程式語言中對方法的呼叫是同步執行的。例如在線程執行體內,即線程的呼叫函數中,方法的呼叫就是同步執行的。如果方法需要很長的時間來完成,比方說從Internet載入數據的方法,呼叫者線程將被阻塞直到方法呼叫完成。如果不希望呼叫被阻塞,則可以通過新增的worker線程並在worker線程中呼叫方法,在大多數編程環中上這樣做可能需要很長的一段代碼,尤其是需要小心處理線程過多的額外開銷。非同步方法呼叫它通過使用一種立即返回的非同步的變體並提供額外的方法來支援接受完成通知以及完成等待改進長期執行的(同步)方法。
活動對象(active object)設計模式通常使用非同步方法呼叫。非同步方法呼叫的一個替代方案是同步的方法呼叫和未來對象(future object)模式。[4] 在Web瀏覽器的實現上可以採用非同步方法呼叫,例如瀏覽器需要在Web頁面中的圖像載入完成之前將頁面顯示出來。
參考來源
編輯- ^ Asynchronous Method Invocation. Distributed Programming with Ice. ZeroC, Inc. [22 November 2008]. (原始內容存檔於2008年1月5日).
- ^ Vermeulen, Allan. An Asynchronous Design Pattern. Dr. Dobb's Journal. June 1996 [22 November 2008]. (原始內容存檔於2009-08-08).
- ^ Nash, Trey. Threading in C#. Accelerated C# 2008. Apress. 2007. ISBN 9781590598733.
- ^ Lavender, R. Greg; Douglas C. Schmidt. Active Object (PDF). [22 November 2008]. (原始內容 (PDF)存檔於2012-09-24).
參考文獻
編輯- Chris Sells and Ian Griffiths. Appendix C.3: The Event-Based Asynchronous Pattern. Programming WPF 2nd. O'Reilly. 2007: 747–749. ISBN 9780596510374.
- Using asynchronous method calls in C#