【Tokio】優勢和劣勢
環境
- Time 2022-01-13
- Rust 1.57.0
- Tokio 1.15.0
概念
參考:https://tokio.rs/tokio/tutorial
Tokio 是 Rust 程式語言的非同步執行時。它提供了編寫網路應用程式所需的構建基礎。它提供了針對各種系統的靈活性,從具有數十個核心的大型伺服器到小型嵌入式裝置。
在高層次上,Tokio提供了幾個主要元件:
- 用於執行非同步程式碼的多執行緒執行時。
- 標準庫的非同步版本。
- 龐大的非同步庫生態系統。
Tokio 在專案中的角色
當你以非同步方式編寫應用程式時,可以通過降低同時執行許多操作的成本來使其更好地擴充套件。但是,非同步 Rust 程式碼不會自行執行,因此您必須選擇執行時來執行它。Tokio 庫是使用最廣泛的執行時,在使用上超過了所有其他執行時的總和。
此外,Tokio 還提供了許多有用的實用程式。編寫非同步程式碼時,不能使用 Rust 標準庫提供的普通阻塞 API,而必須改用它們的非同步版本。這些替代版本由 Tokio 提供,在能使用的地方,映象了 Rust 標準庫的 API。
Tokio 的優勢
本節將概述 Tokio 的一些優點。
快
Tokio 是快速的,建立在 Rust 程式語言之上,Rust 程式語言本身也很快。這是本著 Rust 的精神完成的,其目標是你不應該通過手動編寫等效程式碼來提高效能。
Tokio 是可擴充套件的,建立在 async/await
語言功能之上,該功能本身是可擴充套件的。處理網路時,由於延遲,處理連線的速度有限,因此擴充套件的唯一方法是一次處理多個連線。使用在 async/await
可靠
Tokio 是使用 Rust 構建的,Rust 是一種語言,使每個人都能夠構建可靠而高效的軟體。研究發現,大約 70% 的高嚴重性安全漏洞是記憶體不安全的結果。使用 Rust 可以消除應用程式中的這一類錯誤。
Tokio 還非常注重提供一致的行為,不會出現意外。Tokio 的主要目標是允許使用者部署可預測的軟體,這些軟體將以可靠的響應時間執行,並且沒有不可預測的延遲峰值。
容易
藉助 Rust 的 async/await
功能,編寫非同步應用程式的複雜性已大大降低。與 Tokio 的實用程式和充滿活力的生態系統相結合,編寫應用程式輕而易舉。
Tokio 在有意義時遵循標準庫的命名約定。這允許輕鬆地將僅使用標準庫編寫的程式碼轉換為使用Tokio編寫的程式碼。藉助 Rust 的強大型別系統,輕鬆交付正確程式碼的能力無與倫比。
靈活
Tokio 提供了執行時的多種變體。從多執行緒、任務竊取執行時到輕量級單執行緒執行時,應有盡有。這些執行時中的每一個都帶有許多配置,以允許使用者根據自己的需要調整它們。
什麼時候不使用 Tokio
儘管 Tokio 對於許多需要同時做很多事情的專案很有用,但也有一些場景,Tokio 並不適合。
- 通過在多個執行緒上並行執行 CPU 密集型計算來加快這些計算的速度。Tokio 是為 IO 繫結的應用程式而設計的,其中每個單獨的任務將大部分時間花在等待 IO 上。如果您的應用程式唯一要做的就是並行執行計算,則應使用 rayon。也就是說,如果你需要同時做這兩件事,仍然可以"混合和匹配"。
- 讀取大量檔案。雖然 Tokio 對於只需要讀取大量檔案的專案似乎很有用,但與普通的執行緒池相比,Tokio 在這裡沒有任何優勢。這是因為作業系統通常不提供非同步檔案 API。
- 傳送單個 Web 請求。Tokio 給你帶來優勢的地方是當你需要同時做很多事情的時候。如果你需要使用一個用於非同步 Rust 的庫,比如 reqwest,但你不需要一次做很多事情,你應該更喜歡該庫的阻塞版本,因為它會讓你的專案更簡單。當然,使用 Tokio 仍然可以工作,但與阻塞 API 相比,它並沒有提供真正的優勢。
總結
描述了 Tokio
的優勢和劣勢,根據具體的場景進行選擇。