多核心處理器共時同作程序設計
如果你想走得快,那麼你就一個人走;如果你想走得遠,那麼就得和一群人一起走。 且貴在堅持到底 ! 不需要幾年的時間, 你在學校裡學的軟體工程技術就可能已成為歷史(過時)... 學習 Scala 不研讀其 Concurrency 你就白學了. WisdomFish.ORG 多核CPU要求開發人員必需在函數式編程方面有著堅實的基礎, 而這正式 Scala 的核心價值所在. 多核CPU的來臨當代與未來的問題隨著 CPU 多核心的數量不斷上升, 程序不一定執行的更有效率! 在
不久的未來,這情況可能變得更糟。你的順序執行Code不僅不會跑得更快,甚至有可能實際上跑得更慢。其原因在於,你獲得越多的核心,由於對整體耗電率和
散熱的影響,每個核心就會更慢。幾年之後,Intel
就會給我們帶來32核的CPU,按這種趨勢,在我們不知不覺之中數千核的CPU就會出現。但每個核心都會比現在的核心慢很多。 - Scala和Erlang,以及多核主導的未來 - 2009/07/30 在老舊的程式語言增加新特點, 真的能解決問題? 在 Java中使用有關 Concurrency 特性的學習成本是非常高昂的, Scala 把 Erlang 風格的基於 Actor 的 concurrency 帶進了JVM。開發者現在可以利用 Scala 的 actor 模型在 JVM 上設計具伸縮性的 concurrency 應用程序,它會自動獲得多核心處理器帶來的優勢,而不必依照複雜的Java 線程(Threads)模型來撰寫程序。 一位Twitter工程師的Scala探秘之旅 Actors:處理並發的一個好方法。Scala提供的這個叫做Actor的並行模型通過它的收件箱來發送和接收非同步資訊,而不是共享資料。這種方式被 稱為:shared nothing 模型。一旦你不再顧慮共享資料的問題,也就不必再為代碼同步和死鎖問題而頭痛。 名詞概念Concurrency Parallelism, 平行, 並行 Thread線程(Thread, 執行緒) 將應用程序劃分成一個或多個同時運行的任務。線程與傳統的多任務進程 之間的區別在於:
解決方法(Ways)
Java Thread 為可變物件, 對於一個真實的應用要確保能寫出 Thread 安全的程式碼, 不是不可能, 但極端的困難, 我們可以在許多簡單的例子中就可以看出, 對於 Thread 間對同步程式塊的調用, 都要嚴格的設計 Check, 這是一個很高成本的要求. immutable object 從根源上解決了這個問題, 沒有狀態能夠被改變, 故也就無需顧慮資料競爭的問題. 輕量級進程Erlang採取了這樣的並發方式。一個Erlang進程是非常輕量化的,Erlang應用常常擁有成千上萬的線程甚至更多。 Scala通過基於事件的Actor從另一方面達到了同樣的效果。 Scala
|