Rust 無畏并發(fā)

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

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

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

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

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

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)