Rust: 多螺紋

https://priver.dev/blog/rust/multi-threading/

Rust:多緒編程

Rust 多緒編程討論了許多開發人員為之努力的課題,同時也展現了 Rust 的特色,藉由強制執行規則來確保您程式碼的記憶體安全。Rust 可以用於建立多緒的網頁伺服器,其常見之挑戰包括競賽條件及死結,而 Rust 目標在於透過編譯時的警示來處理這些問題。

除了 race condition 和 deadlocks 这些挑战之外,Rust 还有特定的内存管理规则,可以在此处了解更多資訊,這些規則可能要求您以不同的方式進行編碼,並考慮更多因素。Rust 編譯器會在編譯代碼時通知您不要擔心犯錯誤。

Rust 遵循 1:1 模型,在 1:1 模型中,每個語言針對一個操作系統執行緒。但是有其他的創建新的線程會回傳 JoinHandle,允許您在終止應用程式之前等待線程完成。

使用操作系统线程而不是像异步 Rust 这样的东西有一个缺点,OS 线程被认为是昂贵的,这意味着即使沒有运行任务,它们也使用系統资源,並在创建和删除这些线程時服用了系統的 CPU 資源。此外,應用程式沒有直接控制線程的執行,因為它們由操作系统管理。

當您使用 Rust 進行內存工作時,該程序還需要遵循所有的所有權規則和借用規則。有多種方法可以應對在多緒情境下處理所有權和借用。

經過發表此文章後,我收到建議應將作用域線程視為替代 Arc,讓我提醒您,Arc 的目的是阻止數據在線程完成之前被從內存中去除,因此要求您遵循内存所有權和借用规则。 同時,此为 marker 指针,用於告诉编译器一个值是否可以在线程间安全共享或移动。

消息传递是一种广泛使用的机制,允许线程相互通信。 在程序设计中,通道的概念通常用来说明这个想法。 有各種類型的通道,但其中最常見的一種是 mpsc,它代表 multi-producer, single-consumer channel。 mpsc 的工作方式是通過創建 channel 並指定緩衝區大小來發送和接收消息。

.unwrap()

现在是时候整理這篇文章了。我希望您有所收獲,如果有任何反饋,我將不勝感激。您可以通过我的 Twitter 帳號 @emil_priver 與我聯繫!😄

via Hacker News

December 26, 2023 at 11:11AM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *