日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Rust異步編程的可觀察調(diào)試工具:Await-Tree

來源: 責(zé)編: 時間:2024-02-05 17:21:08 220觀看
導(dǎo)讀Async Rust中的future可以任意組合或嵌套,以實現(xiàn)各種控制流。假設(shè)每個Future的執(zhí)行都表示為一個節(jié)點,那么可以將異步任務(wù)的異步執(zhí)行組織到一個邏輯樹中,該邏輯樹在Future的輪詢、完成和取消過程中不斷轉(zhuǎn)換。在本文中,我們

Async Rust中的future可以任意組合或嵌套,以實現(xiàn)各種控制流。假設(shè)每個Future的執(zhí)行都表示為一個節(jié)點,那么可以將異步任務(wù)的異步執(zhí)行組織到一個邏輯樹中,該邏輯樹在Future的輪詢、完成和取消過程中不斷轉(zhuǎn)換。SHh28資訊網(wǎng)——每日最新資訊28at.com

在本文中,我們將介紹Await-Tree,一個Async Rust的調(diào)試工具。它可以分析任務(wù)中的異步調(diào)用鏈和任務(wù)之間的依賴阻塞關(guān)系,以最小的運行時開銷顯著提高系統(tǒng)的可觀察性和可調(diào)試性。await-tree允許開發(fā)人員在運行時轉(zhuǎn)儲這個執(zhí)行樹,每個Future的跨度由instrument_await注釋。SHh28資訊網(wǎng)——每日最新資訊28at.com

下面我們看一個基本示例:SHh28資訊網(wǎng)——每日最新資訊28at.com

在Cargo.toml文件中,加入以下依賴項:SHh28資訊網(wǎng)——每日最新資訊28at.com

[dependencies]await-tree = "0.1.2"futures = "0.3.30"tokio = {version = "1.35.1", features = ["full"]}

SHh28資訊網(wǎng)——每日最新資訊28at.com

代碼如下:SHh28資訊網(wǎng)——每日最新資訊28at.com

use std::time::Duration;use await_tree::{Config, InstrumentAwait, Registry};use futures::future::{join, pending};use tokio::time::sleep;async fn bar(i: i32) {    // `&'static str` span    baz(i).instrument_await("baz in bar").await}async fn baz(i: i32) {    // runtime `String` span is also supported    pending()        .instrument_await(format!("pending in baz {i}"))        .await}async fn foo() {    // spans of joined futures will be siblings in the tree    join(        bar(3).instrument_await("bar"),        baz(2).instrument_await("baz"),    )    .await;}#[tokio::main]async fn main() {    let mut registry = Registry::new(Config::default());    let root = registry.register((), "foo");    tokio::spawn(root.instrument(foo()));    sleep(Duration::from_secs(1)).await;    let tree = registry.get(&()).unwrap().to_string();    println!("{tree}");}

SHh28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行cargo run,結(jié)果如下:SHh28資訊網(wǎng)——每日最新資訊28at.com

foo [1.002s]  baz [1.002s]    pending in baz 2 [1.002s]  bar [1.002s]    baz in bar [1.002s]      pending in baz 3 [1.002s]

SHh28資訊網(wǎng)——每日最新資訊28at.com

在代碼中,我們有一些簡單的async函數(shù)嵌套調(diào)用和使用join并發(fā)執(zhí)行。與通常的代碼不同,我們在希望跟蹤的每個關(guān)鍵future后面添加.instrument_await,并為其指定名稱。此名稱可以是靜態(tài)字符串常量,也可以包含其他運行時信息。SHh28資訊網(wǎng)——每日最新資訊28at.com

我們再看另外一個例子:SHh28資訊網(wǎng)——每日最新資訊28at.com

use std::time::Duration;use await_tree::{Config, InstrumentAwait, Registry};use futures::channel::oneshot::{self, Receiver};use futures::future::{pending, select};use futures::FutureExt;use tokio::time::sleep;async fn work(rx: Receiver<()>) {    let mut fut = pending().instrument_await("fut");    let _ = select(        sleep(Duration::from_millis(500))            .instrument_await("sleep")            .boxed(),        &mut fut,    )    .instrument_await("select")    .await;    // 等待信號繼續(xù)    rx.instrument_await("rx").await.unwrap();    fut.await}#[tokio::main]async fn main() {    let mut registry = Registry::new(Config::default());    let root = registry.register((), "work");    let (tx, rx) = oneshot::channel();    tokio::spawn(root.instrument(work(rx)));    sleep(Duration::from_millis(100)).await;    let tree = registry.get(&()).unwrap().to_string();    println!("{tree}");    sleep(Duration::from_secs(1)).await;    let tree = registry.get(&()).unwrap().to_string();    println!("{tree}");    tx.send(()).unwrap();    sleep(Duration::from_secs(1)).await;    let tree = registry.get(&()).unwrap().to_string();    println!("{tree}");}

SHh28資訊網(wǎng)——每日最新資訊28at.com

結(jié)果如下:SHh28資訊網(wǎng)——每日最新資訊28at.com

work [101.181ms]  select [101.066ms]    fut [101.044ms]    sleep [101.044ms]work [1.103s]  rx [601.779ms][Detached 4]  fut [1.103s]work [2.105s]  fut [2.105s]

SHh28資訊網(wǎng)——每日最新資訊28at.com

這個例子展示了如何從樹中分離并重新掛載一個span。SHh28資訊網(wǎng)——每日最新資訊28at.com

SHh28資訊網(wǎng)——每日最新資訊28at.com

SHh28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

在本文中,我們介紹了await- tree作為Async Rust中可觀察性的強大工具。await- tree是為Async Rust原生設(shè)計的回溯工具,它允許開發(fā)者實時觀察每個異步任務(wù)的執(zhí)行狀態(tài),并分析不同future或任務(wù)之間的依賴阻塞關(guān)系。SHh28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-74193-0.htmlRust異步編程的可觀察調(diào)試工具:Await-Tree

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: .NET中使用BootstrapBlazor組件庫Table實操篇

下一篇: 創(chuàng)建線程的幾種方式?你知道嗎?

標(biāo)簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 慈利县| 韩城市| 北票市| 青阳县| 英山县| 仪陇县| 田东县| 洞口县| 济阳县| 三河市| 中卫市| 西安市| 泸定县| 南丹县| 宜川县| 双城市| 丰城市| 玉树县| 邯郸县| 彭泽县| 苍溪县| 永福县| 卓尼县| 精河县| 兴山县| 白城市| 芜湖市| 呼伦贝尔市| 山西省| 泸水县| 思茅市| 确山县| 东源县| 招远市| 廊坊市| 周宁县| 梅河口市| 达日县| 进贤县| 侯马市| 蒲江县|