2014年2月9日 星期日
Deferred & Promise
最近同事在解High Resolution issue的時候用到了Deferred/Promise的Design Pattern
問題是這樣子,要同時讀取及輸出N個圖片,但同時可以用M個Worker進行以節省時間,而圖片輸出的順序必須依照z-order排序,這表示圖片B輸出時必須等圖片A輸出完成。
這個問題的關鍵在於Task之間必須有Dependency的觀念,如果純用JAVA硬幹是可以用Thread Pool再加上Callable/Future實現,但針對這種問題已經有Deferred/Promise的設計概念可以使用。
簡單介紹一下D&P的概念(如上圖所示),如果Task之間有Dependency,甚至是帶入參數必須等前一個Task完成才能決定時,就非常適合使用它。
在jQuery 1.5之後已經有直接內建DeferredObject
http://api.jquery.com/category/deferred-object/
在Go的語言也是
http://golang.org/doc/effective_go.html#defer
Python也有人包library
http://twistedmatrix.com/documents/13.0.0/core/howto/defer.html
Java雖然不是內建但也有人包成library : jDeferred,當然也有Android的support
https://github.com/jdeferred/jdeferred
最近Parse也release一款類似的library : Bolts (iOS/Android supported)
https://github.com/BoltsFramework/
參考鏈結:
What are the differences between deferred promise and future in JS
http://stackoverflow.com/questions/6801283/what-are-the-differences-between-deferred-promise-and-future-in-javascript
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言