1. 程式人生 > 其它 >【Tokio】優勢和劣勢

【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 的優勢和劣勢,根據具體的場景進行選擇。

附錄