色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Tokio中hang死所有worker的方法

jf_wN0SrCdH ? 來源:Rust語言中文社區 ? 2023-02-03 16:26 ? 次閱讀

Tokio[1]的 task (一個 Future ) 里如果使用了阻塞調用,例如std::Mutex,會阻塞當前的 tokio-worker 線程,這個 worker 無法再執行其他 task。所以代碼里如果不可避免的有(少量的)阻塞調用,就要為 runtime 啟動更多的 worker 線程,保證存在沒被阻塞的 worker 來執行待調度的 task,以避免整個 tokio runtime 完全 hang 住(有 task 但沒 worker 運行它)。

但現實是,就算 worker 再多,tokio 也可能造成永久性的阻塞。

原因是 tokio 里的待執行 task 不是簡單的放到一個 queue 里,除了 runtime 內共享的,可被每個 worker 消費的run_queue[2],每個 worker 還有一個自己的lifo_slot[3],只存儲一個最后被放入的 task (目的是減小調度延遲)。lifo_slot只由它所屬的 worker 使用,里面存儲的 task 不能被其他 worker 執行。由于這個結構,構造 hang 住的方法是如圖所示:

  • ?Future f1 被 runtime-1 執行, 持有一個 async 的鎖m后,返回了Pending,這時它被調度到 worker-1 本地的lifo_slot

  • ?Future f2 在 runtime-1 執行后返回Pending,被放入共享隊列run_queue

  • ?Future f3 在 runtime-1 中執行, 它將一個任務f4交給其他的 runtime 去完成(例如為了隔離網絡IO和本地磁盤IO),使用block_on(f4)[4]的方式,等待執行結果返回。

  • ? f4 中也需要鎖m,等待。

這時,f2 在共享隊列run_queue中,可以被執行,但是 f1 在 worker-1 本地的lifo_slot里,只能由 worker-1 調度,但 worker-1 當前阻塞在 f3。于是等待關系形成了一個環:f4 → m(f1) → f3 → f4,hang 死任務達成。

cc721fae-a397-11ed-bfe3-dac502259ad0.png

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4329

    瀏覽量

    85946
  • 線程
    +關注

    關注

    0

    文章

    505

    瀏覽量

    19705
  • Worker
    +關注

    關注

    0

    文章

    8

    瀏覽量

    6472
  • Tokio
    +關注

    關注

    0

    文章

    12

    瀏覽量

    65

原文標題:Tokio 中 hang 死所有 worker 的方法

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是Tokio模塊 Channel?

    的一個重要組成部分,它可以用于在異步任務之間傳遞數據。在本教程,我們將介紹 Rust 語言中的 Tokio 模塊 channel,并提供幾個示例,以幫助您更好地理解它的使用方法。 什么是 T
    的頭像 發表于 09-19 15:57 ?980次閱讀

    鴻蒙原生應用開發-ArkTS語言基礎類庫多線程TaskPool和Worker的對比(三)

    的路徑(scriptURL),Worker文件存放位置默認路徑為Worker文件所在目錄與pages目錄屬于同級。 四、Stage模型 構造函數的scriptURL示例如下: // 導入模塊
    發表于 03-27 16:26

    面向對象嵌入式實時操作系統Worker1.0

    Worker1.0繼承圖1 Worker1.0主要類的簡介3 Worker1.0 API4 Worker1.0移植9 Worker1.0例程
    發表于 04-29 18:01 ?39次下載
    面向對象嵌入式實時操作系統<b class='flag-5'>Worker</b>1.0

    normal worker_pool詳細的創建過程代碼分析

    默認 work 是在 normal worker_pool 處理的。系統的規劃是每個 CPU 創建兩個 normal worker_pool:一個 normal 優先級 (nice=0)、一個高
    的頭像 發表于 04-08 14:35 ?7473次閱讀
    normal <b class='flag-5'>worker</b>_pool詳細的創建過程代碼分析

    WasmEdge增加了Tokio支持

    看:https://wasmer.io/posts/wasmer-takes-webassembly-libraries-manistream-with-wai WasmEdge增加了Tokio 支持
    的頭像 發表于 12-05 11:55 ?852次閱讀

    PCB上的銅對電路性能的影響

    在PCB的制造和設計過程,可能會出現一種叫做"銅"的問題。本文將解析銅在PCB上的含義、成因、對電路性能的影響以及解決方法
    的頭像 發表于 06-05 14:16 ?1246次閱讀
    PCB上的<b class='flag-5'>死</b>銅對電路性能的影響

    Tokio 模塊的優雅停機機制

    在進行高并發、網絡編程時,優雅停機是一個非常重要的問題。在 Rust 語言中,Tokio 是一個非常流行的異步編程框架,它提供了一些優雅停機的機制,本文將圍繞 Tokio 模塊的優雅停機進行詳細
    的頭像 發表于 09-19 15:26 ?652次閱讀

    如何使用Tokio 和 Tracing模塊構建異步的網絡應用程序

    ,并在調試和故障排除時提供有用的信息。 在本教程,我們將介紹如何使用 Tokio 和 Tracing 模塊來構建一個異步的網絡應用程序,并使用 Tracing 來記錄應用程序的行為和性能。我們將從安裝和配置開始,然后介紹如何使用 To
    的頭像 發表于 09-19 15:29 ?707次閱讀

    如何使用 Tokio 模塊的Channel

    便地進行消息傳遞和數據共享。 在本教程是 Channel 的下篇,我們將介紹如何使用 Tokio 模塊的 Channel,包括如何使用異步 Channel 和如何使用標準庫的同步 Channel 來擴展
    的頭像 發表于 09-19 15:38 ?689次閱讀

    tokio模塊channel的使用場景和優缺點

    Rust 語言的 tokio 模塊提供了一種高效的異步編程方式,其中的 channel 模塊是其核心組件之一。本教程將介紹 tokio 模塊 channel 的除了上文提到的 mspc
    的頭像 發表于 09-19 15:54 ?816次閱讀

    Tokio 的基本用法

    Tokio 篇將由淺入深的從基礎到實戰,以一個完整的 Rust 語言子系列講述網絡編程。 為什么要使用 Tokio? 在 Rust ,使用異步編程可以提高程序的性能和響應速度,但是異步編程往往需要編寫
    的頭像 發表于 09-19 16:05 ?854次閱讀

    Channel模塊的使用方法示例

    教程,我們將介紹 Rust 語言中的 Tokio 模塊 channel,并提供幾個示例,以幫助您更好地理解它的使用方法。 什么是 Tokio 模塊 Channel?
    的頭像 發表于 09-20 11:47 ?1073次閱讀

    Object類所有方法

    ,也就是說任何類都直接或間接繼承此類,Object 類能訪問的方法所有類中都可以調用,下面我們會分別介紹Object 類所有方法
    的頭像 發表于 10-13 11:50 ?547次閱讀
    Object類<b class='flag-5'>中</b>的<b class='flag-5'>所有方法</b>

    鴻蒙語言基礎類庫:ohos.worker 啟動一個Worker

    Worker是與主線程并行的獨立線程。創建Worker的線程稱之為宿主線程,Worker自身的線程稱之為Worker線程。創建Worker
    的頭像 發表于 07-11 17:03 ?496次閱讀
    鴻蒙語言基礎類庫:ohos.<b class='flag-5'>worker</b> 啟動一個<b class='flag-5'>Worker</b>

    深度解析:PCB銅問題的根源與處理方法

    一站式PCBA智造廠家今天為大家講講PCB設計銅可能帶來的問題?PCB設計如何處理銅。在PCB設計過程
    的頭像 發表于 11-28 09:27 ?451次閱讀
    主站蜘蛛池模板: 亚洲日本欧美日韩高观看| 国产学生在线播放精品视频| 久久久视频2019午夜福利| 一本色道久久综合亚洲精品蜜桃冫| 91欧美秘密入口| 国内精品蜜汁乔依琳视频| 一个人的视频在线观看免费观看| 快播最新电影网站| 亚洲精品久久一区二区三区四区| 极品网红液液酱粉嫩福利照子凌酱| 在线A亚洲老鸭窝天堂AV高清| 嫩草影院久久精品| 国产精品成人观看视频免费| 日日久久狠狠8888偷偷色| 国产人妻午夜无码AV天堂 | 国产亚洲欧美在线观看三区| 玩弄朋友娇妻呻吟交换电影| 精品视频久久久久| 伊人成综合网伊人222| 欧美日韩一二区旡码高清在线| 5g天天影院天天看天天爽| 色偷偷91综合久久噜噜| 公和熄洗澡三级中文字幕| 亚洲女初尝黑人巨磁链接| 欧洲馒头大肥p| 国产AV天堂亚洲AV麻豆| 伊人亚洲综合青草青草久热| 久9视频这里只有精品123| china年轻小帅脸直播飞机| 小小水蜜桃视频高清在线播放| 国产精品久久久久久人妻精品流| 曰本熟妇乱妇色A片在线| 日日噜噜大屁股熟妇| 久久亚洲这里只有精品18| 国产精品成人网| caoporn 超碰免费视频| 亚洲午夜福利未满十八勿进| 色mimi| 牛和人交videos欧美| 精品一区二区三区色花堂| 国产精品VIDEOS麻豆TUBE|