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

附錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM