首頁>技術>

Tokio 1.0 穩定版本已釋出,Tokio 是 Rust 的非同步 runtime,可用於編寫快速、可靠的網路應用。Tokio 還提供用於 TCP、UDP、計時器、多執行緒、工作竊取演算法(work-stealing)排程等的 API。

Tokio 團隊表示,雖然 Tokio 從四年前剛誕生起就一直在不斷髮展,不過出現真正的顯著變化是在一年前,因為 Rust 在當時才正式支援 async/await。

示例程式碼

使用 Tokio 編寫的基本 TCP echo 伺服器:

use tokio::net::TcpListener;use tokio::io::{AsyncReadExt, AsyncWriteExt};#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> {    let mut listener = TcpListener::bind("127.0.0.1:8080").await?;    loop {        let (mut socket, _) = listener.accept().await?;        tokio::spawn(async move {            let mut buf = [0; 1024];            // In a loop, read data from the socket and write the data back.            loop {                let n = match socket.read(&mut buf).await {                    // socket closed                    Ok(n) if n == 0 => return,                    Ok(n) => n,                    Err(e) => {                        eprintln!("failed to read from socket; err = {:?}", e);                        return;                    }                };                // Write the data back                if let Err(e) = socket.write_all(&buf[0..n]).await {                    eprintln!("failed to write to socket; err = {:?}", e);                    return;                }            }        });    }}

在釋出公告中,Tokio 團隊還介紹了 Tokio 的知名使用者和案例。例如,Discord 透過使用 Tokio 將長尾延遲 (Tail Latency) 降低了 5 倍;Fly.io 使用 Tokio 後輕易滿足了效能要求;AWS 的 Lambda 團隊也使用 Tokio 實現了更可靠、更靈活的服務。

1.0 作為重要版本更新,Tokio 團隊對其穩定性做出了保證,承諾會為 Rust 生態提供穩定的基礎設施。Tokio 團隊表示目前沒有關於 Tokio 2.0 的計劃,並承諾至少在 3 年內不釋出 Tokio 2.0。他們計劃為 1.0 提供至少 5 年的維護支援。

當然,穩定並不意味著 Tokio 停滯不前,Tokio 團隊介紹了他們未來要完成的工作:推動 Stream trait 進入 Rust 標準庫、實現 io_uring 介面、整合 tracing 以及完善 Tokio 的整體生態。這裡的生態就是 Tokio 團隊所說的 Tokio stack。舉個例子,Tokio 為標準基元 (standard primitives),如 socket 和定時器提供了 runtime 和非同步API,但網路應用通常會使用更高級別的協議,如 HTTP 和 gRPC。因此 Tokio stack 會提供 HTTP 的 Hyper 和 gRPC 的 Tonic 以滿足需求。

最後,Tokio 團隊表示隨著 Tokio 的推出,他們會專注於開發 Tower,這是一套用於構建可靠客戶端和伺服器的可重用元件。

詳情檢視 https://tokio.rs/blog/2020-12-tokio-1-0

12
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 要想學好Nginx,就看這份阿里P8總結的1331頁進階筆記