Rust 無畏并發(fā)

2023-03-22 15:07 更新
ch16-00-concurrency.md
commit 1fedfc4b96c2017f64ecfcf41a0a07e2e815f24f

安全且高效的處理并發(fā)編程是 Rust 的另一個主要目標(biāo)。并發(fā)編程Concurrent programming),代表程序的不同部分相互獨立的執(zhí)行,而 并行編程parallel programming)代表程序不同部分于同時執(zhí)行,這兩個概念隨著計算機越來越多的利用多處理器的優(yōu)勢時顯得愈發(fā)重要。由于歷史原因,在此類上下文中編程一直是困難且容易出錯的:Rust 希望能改變這一點。

起初,Rust 團隊認(rèn)為確保內(nèi)存安全和防止并發(fā)問題是兩個分別需要不同方法應(yīng)對的挑戰(zhàn)。隨著時間的推移,團隊發(fā)現(xiàn)所有權(quán)和類型系統(tǒng)是一系列解決內(nèi)存安全  并發(fā)問題的強有力的工具!通過利用所有權(quán)和類型檢查,在 Rust 中很多并發(fā)錯誤都是 編譯時 錯誤,而非運行時錯誤。因此,相比花費大量時間嘗試重現(xiàn)運行時并發(fā) bug 出現(xiàn)的特定情況,Rust 會拒絕編譯不正確的代碼并提供解釋問題的錯誤信息。因此,你可以在開發(fā)時修復(fù)代碼,而不是在部署到生產(chǎn)環(huán)境后修復(fù)代碼。我們給 Rust 的這一部分起了一個綽號 無畏并發(fā)fearless concurrency)。無畏并發(fā)令你的代碼免于出現(xiàn)詭異的 bug 并可以輕松重構(gòu)且無需擔(dān)心會引入新的 bug。

注意:出于簡潔的考慮,我們將很多問題歸類為 并發(fā),而不是更準(zhǔn)確的區(qū)分 并發(fā)和(或)并行。如果這是一本專注于并發(fā)和/或并行的書,我們肯定會更加精確的。對于本章,當(dāng)我們談到 并發(fā) 時,請自行腦內(nèi)替換為 并發(fā)和(或)并行

很多語言所提供的處理并發(fā)問題的解決方法都非常有特色。例如,Erlang 有著優(yōu)雅的消息傳遞并發(fā)功能,但只有模糊不清的在線程間共享狀態(tài)的方法。對于高級語言來說,只實現(xiàn)可能解決方案的子集是一個合理的策略,因為高級語言所許諾的價值來源于犧牲一些控制來換取抽象。然而對于底層語言則期望提供在任何給定的情況下有著最高的性能且對硬件有更少的抽象。因此,Rust 提供了多種工具,以符合實際情況和需求的方式來為問題建模。

如下是本章將要涉及到的內(nèi)容:

  • 如何創(chuàng)建線程來同時運行多段代碼。
  • 消息傳遞Message passing)并發(fā),其中信道(channel)被用來在線程間傳遞消息。
  • 共享狀態(tài)Shared state)并發(fā),其中多個線程可以訪問同一片數(shù)據(jù)。
  • ?Sync? 和 ?Send trait?,將 Rust 的并發(fā)保證擴展到用戶定義的以及標(biāo)準(zhǔn)庫提供的類型中。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號