Scala 中的同步
Suraj P
2023年1月30日
在本文中,我們將學習 Scala 中的同步。
在當今的場景中,許多應用程式需要支援併發性和並行性。因此,當我們有多個程序或執行緒在共享資源上工作時,我們需要一種機制來避免任何不一致。
這就是同步發揮作用的地方。
Scala 中 synchronized
的語法
我們可以使用 Java 類在 Scala 中實現同步。
語法:
synchronized{
//our code here
}
我們可以使用 Scala 的 synchronized
關鍵字建立一個同步塊。在這個塊中,我們可以編寫我們想要同步的程式碼。
這樣可以防止我們的資源同時被多個執行緒修改,保持資料的一致性。
在 Scala 中使用同步
只要我們有共享資源,我們就可以使用同步,並且我們不希望它們被各種程序/執行緒同時修改。這在現實世界中至關重要,因為交易或計算取決於其他資料。
如果我們不同步,可能會導致不一致。
讓我們以銀行交易為例來更好地理解這一點。
假設 A 和 B 可以訪問我們的聯名賬戶,裡面有 2000 美元。現在,他們倆都想同時取款,但這是不可能的,因為一次只有一個人可以取款。
因此,作為共享資源的帳戶必須鎖定一段時間。當第一個人,比如說 B,完成他們的操作時,我們只釋放鎖並允許其他人訪問資源,這樣就不會發生任何不一致。
在 Scala 中使用同步時,我們必須牢記以下幾點:
- 它使程式的執行時間非常慢,因為一次只允許一個執行緒或程序訪問共享部分,並且可能有數千個這樣的執行緒試圖訪問資源。
- 在同步期間,執行一個執行緒持有鎖,因此沒有其他人可以進入資料的共享部分,也稱為臨界區。同時,所有其他執行緒進入等待狀態,直到當前執行緒完成執行。
- 只有當我們依賴於先前的值時才應該使用同步方法,在併發和多道程式環境中影響我們的當前值。
示例程式碼:
object workspace extends App {
synchronized {
println("We are synchronizing")
for (i<- 0 to 5) {
println(i)
}
}
}
我們將在同步塊內列印從 0 到 5 的整數值。
輸出:
We are synchronizing
0
1
2
3
4
5
まとめ
我們通過同步來避免應用程式中的資料不一致,但這會使我們的應用程式變慢一些,因為一次只有一個執行緒可以執行該塊。
當使用相同程式碼和執行緒的不同例項可以在它們上執行的多核和並行分散式處理系統時,可以避免這種情況。