close
平行處理是一個非常重要的程式設計方法,你幾乎不會不遇到它,在未來越來越多複雜的程式應用中,平行處理一定跑不掉。
「平行處理,我會啊,Java裡面不就不包含有 thread,用它就沒錯了」
沒錯,Java 一開始出來時,在語言層級直接支援 thread,以那時的時空背景,確實是令人眼睛一亮的特色。
「Java有 thread、有 synchronized (lock),還有一大堆豐富的資料結構供我們使用,還不夠嗎?」
以上確實都是使用 Java 撰寫平行處理程式時很重要工具。
可是,你若曾經使用 Java 的 thread 來開發過程式,你會發現並不是那麼好寫。你會遇到不少狀況,不是程式不小心就給你停住(deadlock啦),要不就是資料有時對有時不對(發生 race condition 了),要讓資料穩穩的走,實在不容易。
可是,你若曾經使用 Java 的 thread 來開發過程式,你會發現並不是那麼好寫。你會遇到不少狀況,不是程式不小心就給你停住(deadlock啦),要不就是資料有時對有時不對(發生 race condition 了),要讓資料穩穩的走,實在不容易。
以上的這些感覺非常正常,不單是你,這也是大家都困繞擾的問題,因此才會持續有平行處理的解決方案出現。
Java 直到現在仍無法擺脫平行處理的夢靨,不單單是 Java,平行處理幾乎是所有語言面對的共同難題。雖然到了 Java 7,Java 對平行處理的解決方案,仍然顯得不夠完整。
Concurrency 這麼難纏主要的問題出在於共享的資料上,各個 thread 在不同的時間去存取同一個資料,造成資料的不一致。
為要解決這個不一致的問題,lock、critical section 等各種解決方案老早就出現。
為要解決這個不一致的問題,lock、critical section 等各種解決方案老早就出現。
全站熱搜