在 Rust 中,處理并發通常有兩種主要方法:線程(threads)和異步任務(async tasks)。這兩種方法都可以實現并發執行,但它們之間有一些關鍵區別。
Rust 的標準庫提供了 std::thread 模塊,可以用來創建和管理線程。線程是操作系統層面的并發執行單元,它們之間共享內存和資源。要使用線程,你需要在函數調用前加上 &mut self 或 &self,以便在線程間傳遞數據。
示例:
use std::thread;
fn main() {
let handle = thread::spawn(|| {
println!("Hello from a thread!");
});
handle.join().unwrap();
}
Rust 的異步編程模型基于 async/await 語法。這種模型允許你在單個線程中并發執行多個任務,而無需創建和管理額外的線程。異步任務通過使用 Future 類型來實現,它們可以在未來某個時間點完成,并在完成時產生結果。
示例:
use tokio::task;
#[tokio::main]
async fn main() {
let handle = task::spawn(async {
println!("Hello from an async task!");
});
handle.await.unwrap();
}
在這個例子中,我們使用了 tokio 庫,它是一個流行的 Rust 異步運行時。要使用 tokio,你需要在 Cargo.toml 文件中添加依賴:
[dependencies]
tokio = { version = "1", features = ["full"] }
總結:
根據你的具體需求,可以選擇合適的方法來處理并發。