国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

iOS信號(hào)量造成線程優(yōu)先級(jí)反轉(zhuǎn)

這篇具有很好參考價(jià)值的文章主要介紹了iOS信號(hào)量造成線程優(yōu)先級(jí)反轉(zhuǎn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在并發(fā)隊(duì)列使用信號(hào)量會(huì)可能會(huì)造成線程優(yōu)先級(jí)反轉(zhuǎn)

一、在iOS16 & XCode14上遇到 - 使用信號(hào)量造成線程優(yōu)先級(jí)反轉(zhuǎn)問題 提醒

經(jīng)過查詢資料,發(fā)現(xiàn)是在XCode14上增加了工具,比如 :

Thread Performance Checker (XCode14上默認(rèn)開啟的),這個(gè)工具會(huì)讓APP在運(yùn)行的時(shí)候,發(fā)現(xiàn)有例如線程優(yōu)先級(jí)反轉(zhuǎn)和非UI工作在主線程上運(yùn)行等問題的時(shí)候,就會(huì)在XCode問題導(dǎo)航欄中提示該卡頓風(fēng)險(xiǎn)警告,可以幫助我們?cè)陂_發(fā)初期就能發(fā)現(xiàn)并解決隱含的卡頓風(fēng)險(xiǎn)問題;這個(gè)不是崩潰,如果不想要,可以在 “Product -> Scheme - > Edit Scheme 的 Diagnostics 中去掉 Thread Performance Checker勾選”

XCode14還有其他一些新增加的工具類,可參考 iOS卡頓檢測(cè)

二、關(guān)于線程優(yōu)先級(jí)反轉(zhuǎn)

優(yōu)先級(jí)反轉(zhuǎn)(Poiority Inversion) 指高優(yōu)先級(jí)任務(wù)需要等待低優(yōu)先級(jí)任務(wù)執(zhí)行完成才能繼續(xù)執(zhí)行,這種情況下優(yōu)先級(jí)被反轉(zhuǎn)了。

舉例:有三個(gè)線程分別為:A、B、C。優(yōu)先級(jí)A > B > C,線程A和B處于掛起狀態(tài),等待某一事件發(fā)生,線程C正在運(yùn)行,此時(shí)任務(wù)C開始使用共享資源Source。在使用Source時(shí),線程A等待事件到來,線程A轉(zhuǎn)為就緒態(tài),因?yàn)榫€程A優(yōu)先級(jí)比線程C高,所以線程A會(huì)立即執(zhí)行。當(dāng)線程A要使用共享資源Source時(shí),由于共享資源Source正在被線程C使用,因此線程A被掛起,線程C開始運(yùn)行。如果此時(shí)中等優(yōu)先級(jí)線程B等待事件到來,則線程B轉(zhuǎn)為就緒態(tài)。由于線程B優(yōu)先級(jí)比線程C高,因此線程B開始運(yùn)行,直到其運(yùn)行完畢,線程C才開始運(yùn)行。直到線程C釋放共享資源Source后,線程A才得以執(zhí)行。在這種情況下,優(yōu)先級(jí)發(fā)生了翻轉(zhuǎn),線程B先于線程A運(yùn)行。

三、優(yōu)先級(jí)反轉(zhuǎn)會(huì)造成什么后果

低優(yōu)先級(jí)的任務(wù)比高優(yōu)先級(jí)的任務(wù)先執(zhí)行,導(dǎo)致任務(wù)的錯(cuò)亂,邏輯錯(cuò)亂;

可能造成系統(tǒng)崩潰;

死鎖;優(yōu)先級(jí)低的線程遲遲得不到調(diào)度,具有高優(yōu)先級(jí)的線程不能執(zhí)行,死鎖;

四、怎么避免線程優(yōu)先級(jí)反轉(zhuǎn)

如果當(dāng)前線程因等待某線程上正在進(jìn)行的 操作如(block1)而受阻,而系統(tǒng)知道block1的所在的目標(biāo)線程,系統(tǒng)會(huì)通過提高相關(guān)線程的優(yōu)先級(jí)來解決優(yōu)先級(jí)反轉(zhuǎn)的問題 (如線程A在嘗試獲取共享資源而被掛起的期間內(nèi),將線程C的優(yōu)先級(jí)提升到同線程A的優(yōu)先級(jí),等線程C處理結(jié)束,降回原優(yōu)先級(jí),這樣能防止C被B搶占)。如果不知道block1所在的目標(biāo)線程,則無法知道應(yīng)該提高誰的優(yōu)先級(jí),也就無法解決反轉(zhuǎn)的問題,如信號(hào)量。

五、使用信號(hào)量可能會(huì)造成線程優(yōu)先級(jí)反轉(zhuǎn),且無法避免

QoS (Quality of Service),用來指示某任務(wù)或者隊(duì)列的運(yùn)行優(yōu)先級(jí);

1、記錄了持有者的api都可以自動(dòng)避免優(yōu)先級(jí)反轉(zhuǎn),系統(tǒng)會(huì)通過提高相關(guān)線程的優(yōu)先級(jí)來解決優(yōu)先級(jí)反轉(zhuǎn)的問題,如 dispatch_sync, 如果系統(tǒng)不知道持有者所在的線程,則無法知道應(yīng)該提高誰的優(yōu)先級(jí),也就無法解決反轉(zhuǎn)問題。

2、慎用dispatch_semaphore 做線程同步

dispatch_semaphore 容易造成優(yōu)先級(jí)反轉(zhuǎn),因?yàn)閍pi沒有記錄是哪個(gè)線程持有了信號(hào)量,所以有高優(yōu)先級(jí)的線程在等待鎖的時(shí)候,內(nèi)核無法知道該提高那個(gè)線程的優(yōu)先級(jí)(QoS);

3、dispatch_semaphore 不能避免優(yōu)先級(jí)反轉(zhuǎn)的原因

在調(diào)用dispatch_semaphore_wait() 的時(shí)候,系統(tǒng)不知道哪個(gè)線程會(huì)調(diào)用 dispatch_semaphore_signal()方法,系統(tǒng)無法知道owner信息,無法調(diào)整優(yōu)先級(jí)。dispatch_group 和semaphore類似,在調(diào)用enter()方法的時(shí)候,無法預(yù)知誰會(huì)leave(),所以系統(tǒng)也不知道owner信息

參考資料:

優(yōu)先級(jí)反轉(zhuǎn)

優(yōu)先級(jí)反轉(zhuǎn)那些事兒

Diagnosing Performance issues early

dispatch_semaphore 會(huì)造成優(yōu)先級(jí)反轉(zhuǎn),慎用!

作者:京東零售?孫巧巧

來源:京東云開發(fā)者社區(qū) 轉(zhuǎn)載請(qǐng)注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-746852.html

到了這里,關(guān)于iOS信號(hào)量造成線程優(yōu)先級(jí)反轉(zhuǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C多線程、鎖、同步、信號(hào)量

    C多線程、鎖、同步、信號(hào)量

    1.1 創(chuàng)建線程 thread 是線程變量地址 attr是線程屬性,一般為NULL start_rount 是函數(shù)指針 arg 是函數(shù)指針指向函數(shù)的參數(shù) 1.2 線程退出 retval可以把退出值帶回去,例子見線程回收 1.3 線程回收 1.4 線程分離: 某些情況下,程序的主線程有自己的其他業(yè)務(wù),如果讓主線程負(fù)責(zé)子線程的

    2024年02月02日
    瀏覽(27)
  • 【Linux】多線程 之 POSIX信號(hào)量

    【Linux】多線程 之 POSIX信號(hào)量

    信號(hào)量又稱為 信號(hào)燈 本質(zhì)就是一個(gè)計(jì)數(shù)器,用于描述臨界資源數(shù)目的 sem: 0 - 1 - 0 若臨界資源只有1個(gè),則sem設(shè)為1,當(dāng)要使用臨界資源時(shí),sem由1變?yōu)?,其他人在想申請(qǐng),則申請(qǐng)不到掛起排隊(duì),等待釋放臨界資源時(shí) sem由0變?yōu)? ,才可以再申請(qǐng)臨界資源 這種信號(hào)量稱為 二元信號(hào)

    2024年02月16日
    瀏覽(47)
  • 一文搞定Linux線程間通訊 / 線程同步方式-互斥鎖、讀寫鎖、自旋鎖、信號(hào)量、條件變量、信號(hào)等等

    目錄 線程間通訊 / 線程同步方式 鎖機(jī)制 互斥鎖(Mutex) 讀寫鎖(rwlock) 自旋鎖(spin) 信號(hào)量機(jī)制(Semaphore) 條件變量機(jī)制 信號(hào)(Signal) 線程間通訊 / 線程同步方式 p.s 以下有很多段落是直接引用,沒有使用 markdown 的 “引用” 格式,出處均已放出。 參考 / 引用: 100as

    2024年02月10日
    瀏覽(24)
  • 線程同步、生產(chǎn)者消費(fèi)模型和POSIX信號(hào)量

    線程同步、生產(chǎn)者消費(fèi)模型和POSIX信號(hào)量

    gitee倉(cāng)庫(kù): 1.阻塞隊(duì)列代碼:https://gitee.com/WangZihao64/linux/tree/master/BlockQueue 2.環(huán)形隊(duì)列代碼:https://gitee.com/WangZihao64/linux/tree/master/ringqueue 概念 : 利用線程間共享的全局變量進(jìn)行同步的一種機(jī)制,主要包括兩個(gè)動(dòng)作:一個(gè)線程等待\\\"條件變量的條件成立\\\"而掛起;另一個(gè)線程使“

    2024年02月03日
    瀏覽(23)
  • 【系統(tǒng)編程】線程安全(POSIX信號(hào)量、互斥鎖、讀寫鎖等)

    【系統(tǒng)編程】線程安全(POSIX信號(hào)量、互斥鎖、讀寫鎖等)

    (??? ),Hello我是 祐言QAQ 我的博客主頁:C/C++語言,數(shù)據(jù)結(jié)構(gòu),Linux基礎(chǔ),ARM開發(fā)板,網(wǎng)絡(luò)編程等領(lǐng)域UP?? 快上??,一起學(xué)習(xí),讓我們成為一個(gè)強(qiáng)大的攻城獅! 送給自己和讀者的一句雞湯??: 集中起來的意志可以擊穿頑石! 作者水平很有限,如果發(fā)現(xiàn)錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)指

    2024年02月10日
    瀏覽(106)
  • 『Linux』第九講:Linux多線程詳解(五)_ 信號(hào)量

    『Linux』第九講:Linux多線程詳解(五)_ 信號(hào)量

    「前言」文章是關(guān)于Linux多線程方面的知識(shí),上一篇是?Linux多線程詳解(四),今天這篇是 Linux多線程詳解(五),內(nèi)容大致是信號(hào)量,講解下面開始! 「歸屬專欄」Linux系統(tǒng)編程 「主頁鏈接」個(gè)人主頁 「筆者」楓葉先生(fy) 「楓葉先生有點(diǎn)文青病」「每篇一句」 求其上,

    2024年02月07日
    瀏覽(18)
  • 14 - 信號(hào)優(yōu)先級(jí)與安全性

    14 - 信號(hào)優(yōu)先級(jí)與安全性

    ---- 整理自狄泰軟件唐佐林老師課程 查看所有文章鏈接:(更新中)Linux系統(tǒng)編程訓(xùn)練營(yíng) - 目錄 對(duì)于 同一個(gè)進(jìn)程 ,如果存在 兩個(gè)不同的未決 實(shí)時(shí)信號(hào)(可靠信號(hào)) ,那么先處理誰? 信號(hào)的本質(zhì)是一種 軟中斷 (中斷有優(yōu)先級(jí),信號(hào)也有優(yōu)先級(jí)) 對(duì)于 未決實(shí)時(shí)信號(hào) : 對(duì)于

    2024年02月13日
    瀏覽(17)
  • 12.3用信號(hào)量進(jìn)行線程同步——生產(chǎn)者與消費(fèi)者問題

    1.shell程序設(shè)計(jì) 2.內(nèi)存管理 3.鏈接庫(kù) 4.文件操作

    2024年02月04日
    瀏覽(26)
  • 【多線程進(jìn)階】信號(hào)量,線程安全集合類,Hashtable與ConcurrentHashMap的區(qū)別,多線程常見的面試題

    【多線程進(jìn)階】信號(hào)量,線程安全集合類,Hashtable與ConcurrentHashMap的區(qū)別,多線程常見的面試題

    前言: 大家好,我是 良辰丫 ,今天學(xué)習(xí)多線程最后一節(jié)內(nèi)容,我們主要去了解信號(hào)量,線程安全集合類,Hashtable與ConcurrentHashMap的區(qū)別,多線程常見的面試題,我們需要重點(diǎn)去掌握,?????? ??個(gè)人主頁:良辰針不戳 ??所屬專欄:javaEE初階 ??勵(lì)志語句:生活也許會(huì)讓我們遍體鱗傷,

    2023年04月27日
    瀏覽(30)
  • 守護(hù)線程和線程優(yōu)先級(jí)的理解

    守護(hù)線程和線程優(yōu)先級(jí)的理解

    守護(hù)線程是一種特殊類型的線程,它的目的是為其他線程提供服務(wù),當(dāng)所有的非守護(hù)線程結(jié)束時(shí),守護(hù)線程也會(huì)隨之結(jié)束,無論它是否執(zhí)行完畢。 守護(hù)線程的主要特點(diǎn)如下: 守護(hù)線程是通過設(shè)置線程的 daemon 屬性為True來創(chuàng)建的。 守護(hù)線程會(huì)隨著程序的結(jié)束而結(jié)束,即使它還

    2024年02月16日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包