異步方法調用
異步方法調用或異步方法模式是(多線程)面向對象程序設計中用於異步調用對象的潛在的長期運行方法的一種設計模式[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#