AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Rust異步編程的可觀察調試工具:Await-Tree

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

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

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

下面我們看一個基本示例:xLS28資訊網——每日最新資訊28at.com

在Cargo.toml文件中,加入以下依賴項:xLS28資訊網——每日最新資訊28at.com

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

xLS28資訊網——每日最新資訊28at.com

代碼如下:xLS28資訊網——每日最新資訊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}");}

xLS28資訊網——每日最新資訊28at.com

執行cargo run,結果如下:xLS28資訊網——每日最新資訊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]

xLS28資訊網——每日最新資訊28at.com

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

我們再看另外一個例子:xLS28資訊網——每日最新資訊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;    // 等待信號繼續    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}");}

xLS28資訊網——每日最新資訊28at.com

結果如下:xLS28資訊網——每日最新資訊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]

xLS28資訊網——每日最新資訊28at.com

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

xLS28資訊網——每日最新資訊28at.com

xLS28資訊網——每日最新資訊28at.com

總結

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

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

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

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

下一篇: 創建線程的幾種方式?你知道嗎?

標簽:
  • 熱門焦點
  • 7月安卓手機好評榜:三星S23Ultra好評率第一

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年7月1日至7月31日,僅限國內市場。第一名:三星Galaxy S23 Ultra好評率:95.71%在即將迎來新
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • SpringBoot中使用Cache提升接口性能詳解

    環境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應用程序提供了透明式添加緩存的支持。和事務支持一樣,抽象緩存允許一致地使用各
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 支持aptX Lossless無損傳輸 iQOO TWS 1賽道版發布限時優惠價369元

    2023年7月4日,“無損音質,聲動人心”iQOO TWS 1正式發布,支持aptX Lossless無損傳輸,限時優惠價369元。iQOO TWS 1耳機率先支持端到端aptX Lossless無
  • iQOO 11S或7月上市:搭載“雞血版”驍龍8Gen2 史上最強5G Soc

    去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,iQOO 11不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競屏,同時在快充
  • 電博會與軟博會實現"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發揮展會拉動人流、信息流、資金流實現快速交互流動的作用,繼而推動區域經濟良性發展;又可以聚
Top