chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Tokio中hang死所有worker的方法

jf_wN0SrCdH ? 來(lái)源:Rust語(yǔ)言中文社區(qū) ? 2023-02-03 16:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Tokio[1]的 task (一個(gè) Future ) 里如果使用了阻塞調(diào)用,例如std::Mutex,會(huì)阻塞當(dāng)前的 tokio-worker 線程,這個(gè) worker 無(wú)法再執(zhí)行其他 task。所以代碼里如果不可避免的有(少量的)阻塞調(diào)用,就要為 runtime 啟動(dòng)更多的 worker 線程,保證存在沒(méi)被阻塞的 worker 來(lái)執(zhí)行待調(diào)度的 task,以避免整個(gè) tokio runtime 完全 hang 住(有 task 但沒(méi) worker 運(yùn)行它)。

但現(xiàn)實(shí)是,就算 worker 再多,tokio 也可能造成永久性的阻塞。

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

  • ?Future f1 被 runtime-1 執(zhí)行, 持有一個(gè) async 的鎖m后,返回了Pending,這時(shí)它被調(diào)度到 worker-1 本地的lifo_slot。

  • ?Future f2 在 runtime-1 執(zhí)行后返回Pending,被放入共享隊(duì)列run_queue

  • ?Future f3 在 runtime-1 中執(zhí)行, 它將一個(gè)任務(wù)f4交給其他的 runtime 去完成(例如為了隔離網(wǎng)絡(luò)IO和本地磁盤(pán)IO),使用block_on(f4)[4]的方式,等待執(zhí)行結(jié)果返回。

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

這時(shí),f2 在共享隊(duì)列run_queue中,可以被執(zhí)行,但是 f1 在 worker-1 本地的lifo_slot里,只能由 worker-1 調(diào)度,但 worker-1 當(dāng)前阻塞在 f3。于是等待關(guān)系形成了一個(gè)環(huán):f4 → m(f1) → f3 → f4,hang 死任務(wù)達(dá)成。

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

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4533

    瀏覽量

    87468
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20224
  • Worker
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    6595
  • Tokio
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    184

原文標(biāo)題:Tokio 中 hang 死所有 worker 的方法

文章出處:【微信號(hào):Rust語(yǔ)言中文社區(qū),微信公眾號(hào):Rust語(yǔ)言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是Tokio模塊 Channel?

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

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)類庫(kù)多線程TaskPool和Worker的對(duì)比(三)

    的路徑(scriptURL),Worker文件存放位置默認(rèn)路徑為Worker文件所在目錄與pages目錄屬于同級(jí)。 四、Stage模型 構(gòu)造函數(shù)的scriptURL示例如下: // 導(dǎo)入模塊
    發(fā)表于 03-27 16:26

    HarmonyOS NEXT 原生應(yīng)用/元服務(wù)-ArkTS代碼調(diào)試worker/taskpool調(diào)試

    代碼后,在 worker 文件設(shè)置斷點(diǎn)。 啟動(dòng)調(diào)試,當(dāng)斷點(diǎn)命中時(shí),調(diào)試窗口會(huì)新啟動(dòng)一個(gè)調(diào)試會(huì)話,顯示 worker 線程的堆棧信息。 二、taskpool 調(diào)試 編寫(xiě)一個(gè) taskpool 代碼,在
    發(fā)表于 03-13 17:46

    TaskPool和Worker的對(duì)比分析

    和SharedArrayBuffer共享。 參數(shù)傳遞直接傳遞,無(wú)需封裝,默認(rèn)進(jìn)行transfer。消息對(duì)象唯一參數(shù),需要自己封裝。 方法調(diào)用直接將方法傳入調(diào)用。在Worker線程中進(jìn)行消息解析并調(diào)用對(duì)應(yīng)
    發(fā)表于 06-18 06:43

    面向?qū)ο笄度胧綄?shí)時(shí)操作系統(tǒng)Worker1.0

    Worker1.0繼承圖1 Worker1.0主要類的簡(jiǎn)介3 Worker1.0 API4 Worker1.0移植9 Worker1.0例程
    發(fā)表于 04-29 18:01 ?39次下載
    面向?qū)ο笄度胧綄?shí)時(shí)操作系統(tǒng)<b class='flag-5'>Worker</b>1.0

    normal worker_pool詳細(xì)的創(chuàng)建過(guò)程代碼分析

    默認(rèn) work 是在 normal worker_pool 處理的。系統(tǒng)的規(guī)劃是每個(gè) CPU 創(chuàng)建兩個(gè) normal worker_pool:一個(gè) normal 優(yōu)先級(jí) (nice=0)、一個(gè)高
    的頭像 發(fā)表于 04-08 14:35 ?7742次閱讀
    normal <b class='flag-5'>worker</b>_pool詳細(xì)的創(chuàng)建過(guò)程代碼分析

    WasmEdge增加了Tokio支持

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

    Tokio 模塊的優(yōu)雅停機(jī)機(jī)制

    在進(jìn)行高并發(fā)、網(wǎng)絡(luò)編程時(shí),優(yōu)雅停機(jī)是一個(gè)非常重要的問(wèn)題。在 Rust 語(yǔ)言中,Tokio 是一個(gè)非常流行的異步編程框架,它提供了一些優(yōu)雅停機(jī)的機(jī)制,本文將圍繞 Tokio 模塊的優(yōu)雅停機(jī)進(jìn)行詳細(xì)
    的頭像 發(fā)表于 09-19 15:26 ?967次閱讀

    如何使用Tokio 和 Tracing模塊構(gòu)建異步的網(wǎng)絡(luò)應(yīng)用程序

    ,并在調(diào)試和故障排除時(shí)提供有用的信息。 在本教程,我們將介紹如何使用 Tokio 和 Tracing 模塊來(lái)構(gòu)建一個(gè)異步的網(wǎng)絡(luò)應(yīng)用程序,并使用 Tracing 來(lái)記錄應(yīng)用程序的行為和性能。我們將從安裝和配置開(kāi)始,然后介紹如何使用 To
    的頭像 發(fā)表于 09-19 15:29 ?1073次閱讀

    如何使用 Tokio 模塊的Channel

    便地進(jìn)行消息傳遞和數(shù)據(jù)共享。 在本教程是 Channel 的下篇,我們將介紹如何使用 Tokio 模塊的 Channel,包括如何使用異步 Channel 和如何使用標(biāo)準(zhǔn)庫(kù)的同步 Channel 來(lái)擴(kuò)展
    的頭像 發(fā)表于 09-19 15:38 ?1015次閱讀

    tokio模塊channel的使用場(chǎng)景和優(yōu)缺點(diǎn)

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

    Tokio 的基本用法

    Tokio 篇將由淺入深的從基礎(chǔ)到實(shí)戰(zhàn),以一個(gè)完整的 Rust 語(yǔ)言子系列講述網(wǎng)絡(luò)編程。 為什么要使用 Tokio? 在 Rust ,使用異步編程可以提高程序的性能和響應(yīng)速度,但是異步編程往往需要編寫(xiě)
    的頭像 發(fā)表于 09-19 16:05 ?1166次閱讀

    Channel模塊的使用方法示例

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

    鴻蒙語(yǔ)言基礎(chǔ)類庫(kù):ohos.worker 啟動(dòng)一個(gè)Worker

    Worker是與主線程并行的獨(dú)立線程。創(chuàng)建Worker的線程稱之為宿主線程,Worker自身的線程稱之為Worker線程。創(chuàng)建Worker
    的頭像 發(fā)表于 07-11 17:03 ?802次閱讀
    鴻蒙語(yǔ)言基礎(chǔ)類庫(kù):ohos.<b class='flag-5'>worker</b> 啟動(dòng)一個(gè)<b class='flag-5'>Worker</b>

    深度解析:PCB銅問(wèn)題的根源與處理方法

    一站式PCBA智造廠家今天為大家講講PCB設(shè)計(jì)銅可能帶來(lái)的問(wèn)題?PCB設(shè)計(jì)如何處理銅。在PCB設(shè)計(jì)過(guò)程,
    的頭像 發(fā)表于 11-28 09:27 ?1068次閱讀