維's profileIT : 是工作還是嗜好?PhotosBlogListsMore ![]() | Help |
|
November 28 平行處理機制,平行Linq和Delphi Prism 在上篇我從一些蛛絲馬跡來猜測Delphi除了朝原生64位元發展之外,也可能會在非同步,平行執行方向進行突破的發展。當這篇文章貼出之後,很快的我的朋友就問我『這樣的』Delphi會在什麼時候出現,說實話我不知道,因為這也是我從一些蛛絲馬跡『猜測』的,所以我當然不知道,只能等時間來告訴我們了,呵呵。 Delphi Prism程式語言中提供了許多非同步,平行執行的機制,除了上次我們看到的async和parallel之外,當我們使用這些非同步,平行執行的機制結合PFX 框架時,也能夠很方便的在使用Linq時也享受平行執行的好處,例如下面是傳統使用Linq的一個典型,簡單的範例: class method ConsoleApp.Linq; var words : sequence of string; begin words := ['嗨', '世界' , 'Linq', 'Parallel Linq' , 'Delphi Prism', 'Delphi 2009', 'BCB 2009', '3rdRail']; var rQuery := from word in words select word; for each s in rQuery do Console.WriteLine(s); Console.ReadLine; end; 當我們使用Delphi Prism編譯並且執行之後,會看到如下的結果: 我們從上圖的執行結果可以看到,它輸出的結果次序和我們在程式碼中定義sequence的次序是一樣。 但是如果我們稍微修改一點程式碼,在words之後呼叫擴展方法AsParallel如下所示: class method ConsoleApp.PLinq; var words : sequence of string; begin words := ['嗨', '世界' , 'Linq', 'Parallel Linq' , 'Delphi Prism', 'Delphi 2009', 'BCB 2009', '3rdRail']; var rQuery := from word in words.AsParallel select word; rQuery.ForAll<string>(word -> Console.WriteLine(word)); Console.ReadLine; end; 那麼我們會看到如下的執行結果: 從上圖中可以發現每次執行平行查詢時執行的結果次序都不同,而且輸出的次序也不是程式碼中定義的次序,這個證明了當使用Delphi Prism的平行機制結合PFX框架時的確是以多個平行執行的核心來處理的。 使用.NET Reflector反組編PLinq方法也可以看到它的確是呼叫PFX框架中提供的平行處理機制: class method ConsoleApp.PLinq; begin ParallelEnumerable.ForAll<String>(ParallelQuery.AsParallel<String>(array of(['嗨', '世界', 'Linq', 'Parallel Linq', 'Delphi Prism', 'Delphi 2009', 'BCB 2009', '3rdRail'])), delegate (word: String) begin Console.WriteLine(word) end; Console.ReadLine end; 和呼叫Linq方法是截然不同的。 class method ConsoleApp.Linq; begin var rQuery: IEnumerable<String> := array of(['嗨', '世界', 'Linq', 'Parallel Linq', 'Delphi Prism', 'Delphi 2009', 'BCB 2009', '3rdRail']); if (rQuery <> nil) then {pseudo} goto Label_0058; rQuery.GetEnumerator; var enumerator: IEnumerator<String> := nil; if (enumerator <> nil) then while enumerator.MoveNext do begin var s: String := enumerator.Current; Console.WriteLine(s) end; Console.ReadLine end; Delphi Prism提供的先進非同步,平行執行機制突然讓原生Delphi 32/64有了新的發展方向。 Comments (4)
TrackbacksThe trackback URL for this entry is: http://gordonliwei.spaces.live.com/blog/cns!CCE1F10BD8108687!2930.trak Weblogs that reference this entry
|
|
|