一次閑聊引申對線程優(yōu)先級的思考

工作閑聊

偶爾偷偷懶和群內(nèi)各位iOS大佬吹吹逼读拆,這不來了個多線程相關(guān)的問題镣奋。

一次群聊

源于閑聊時對自己的懷疑枪汪。

Q:主線程的優(yōu)先級是不是最高的?

A:當(dāng)我看到問題時的回答:是世澜。

優(yōu)先級

線程優(yōu)先級決定了任務(wù)開始執(zhí)后系統(tǒng)資源分配的優(yōu)先級独旷,例如 CPU 時間片, 網(wǎng)絡(luò)資源, 硬盤資源等。

typedef NS_ENUM(NSInteger, NSQualityOfService) {
    NSQualityOfServiceUserInteractive = 0x21,
    NSQualityOfServiceUserInitiated = 0x19,
    NSQualityOfServiceUtility = 0x11,
    NSQualityOfServiceBackground = 0x09,
    NSQualityOfServiceDefault = -1
};
  1. NSQualityOfServiceUserInteractive:用來處理用戶操作寥裂,例如界面刷新嵌洼、動畫等。優(yōu)先級最高封恰,即時執(zhí)行麻养。
  2. NSQualityOfServiceUserInitiated:處理初始化任務(wù),為將來的用戶操作作準(zhǔn)備诺舔。例如加載文件或 Email 等鳖昌”钙瑁基本即時執(zhí)行,最多幾秒延遲遗遵。
  3. NSQualityOfServiceUtility:用戶不需要立即結(jié)果的操作萍恕,一般伴隨進(jìn)度條逸嘀。例如下載车要、數(shù)據(jù)導(dǎo)入、周期性的內(nèi)容更新等崭倘。幾秒到幾分鐘延遲翼岁。
  4. NSQualityOfServiceBackground:用于用戶不可見的操作。例如簡歷索引司光、預(yù)加載琅坡、同步等。幾分鐘到數(shù)小時延遲残家。
  5. NSQualityOfServiceDefault:默認(rèn)的 QoS 用來表示缺省值榆俺。當(dāng)有可能通過其它途徑推斷出可能的 QoS 信息時,則使用推斷出的 Qos坞淮。如果不能推斷茴晋,則使用 UserInitiated 和 Utility 之間的 QoS。

測試

NSThread *currentThread = [NSThread mainThread];
NSLog(@"%ld", (long)currentThread.qualityOfService);

此時經(jīng)過上面的分析確實應(yīng)該是最高的回窘,但難道是錯的嗎诺擅?

后面查了官方文檔有如下一段話:

Setting the Thread Priority
Any new thread you create has a default priority associated with it. The kernel’s scheduling algorithm takes thread priorities into account when determining which threads to run, with higher priority threads being more likely to run than threads with lower priorities. Higher priorities do not guarantee a specific amount of execution time for your thread, just that it is more likely to be chosen by the scheduler when compared to lower-priority threads.

你創(chuàng)建的任何新線程都有一個與之關(guān)聯(lián)的默認(rèn)優(yōu)先級。內(nèi)核調(diào)度算法在決定該運(yùn)行哪個線程時啡直,會把線程的優(yōu)先級作為考量因素烁涌,較高優(yōu)先級的線程會比較低優(yōu)先級的線程具有更多的運(yùn)行機(jī)會。較高優(yōu)先級不保證你的線程具體執(zhí)行的時間酒觅,只是相比較低優(yōu)先級的線程撮执,它更有可能被調(diào)度器選擇執(zhí)行而已。

下面還有個重要提示:

Important: It is generally a good idea to leave the priorities of your threads at their default values. Increasing the priorities of some threads also increases the likelihood of starvation among lower-priority threads. If your application contains high-priority and low-priority threads that must interact with each other, the starvation of lower-priority threads may block other threads and create performance bottlenecks.

重要提示:通常最好將線程的優(yōu)先級保留為其默認(rèn)值舷丹。增加一些線程的優(yōu)先級也會增加低優(yōu)先級線程中出現(xiàn)饑餓的可能性二打。如果應(yīng)用程序包含必須相互交互的高優(yōu)先級和低優(yōu)先級線程,則低優(yōu)先級線程的匱乏可能會阻塞其他線程并造成性能瓶頸掂榔。

此時我覺得出題的那位同學(xué)問題不夠嚴(yán)謹(jǐn)继效,又或者沒有g(shù)et到他的點,然而后續(xù)也聯(lián)系不到那位同學(xué)装获,所以只能告一段落瑞信。

參考

Threading Programming Guide: Thread Management

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市穴豫,隨后出現(xiàn)的幾起案子凡简,更是在濱河造成了極大的恐慌逼友,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秤涩,死亡現(xiàn)場離奇詭異帜乞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)筐眷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門黎烈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匀谣,你說我怎么就攤上這事照棋。” “怎么了武翎?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵烈炭,是天一觀的道長。 經(jīng)常有香客問我宝恶,道長符隙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任垫毙,我火速辦了婚禮霹疫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘露久。我一直安慰自己更米,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布毫痕。 她就那樣靜靜地躺著征峦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪消请。 梳的紋絲不亂的頭發(fā)上栏笆,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音臊泰,去河邊找鬼蛉加。 笑死,一個胖子當(dāng)著我的面吹牛缸逃,可吹牛的內(nèi)容都是我干的针饥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼需频,長吁一口氣:“原來是場噩夢啊……” “哼丁眼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昭殉,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤苞七,失蹤者是張志新(化名)和其女友劉穎藐守,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹂风,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡卢厂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惠啄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慎恒。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖礁阁,靈堂內(nèi)的尸體忽然破棺而出巧号,到底是詐尸還是另有隱情族奢,我是刑警寧澤姥闭,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站越走,受9級特大地震影響棚品,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜廊敌,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一铜跑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骡澈,春花似錦锅纺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至护锤,卻和暖如春官地,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烙懦。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工驱入, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氯析。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓亏较,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掩缓。 傳聞我的和親對象是個殘疾皇子雪情,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,308評論 0 10
  • 線程 操作系統(tǒng)線程理論 線程概念的引入背景 進(jìn)程 之前我們已經(jīng)了解了操作系統(tǒng)中進(jìn)程的概念旺罢,程序并不能單獨運(yùn)行旷余,只有...
    go以恒閱讀 1,635評論 0 6
  • 名稱 libev - 一個 C 編寫的功能全面的高性能事件循環(huán)。 概要 示例程序 關(guān)于 libev Libev 是...
    hanpfei閱讀 15,195評論 0 5
  • 簡介 在iOS中扁达,我們需要將非UI且耗時的任務(wù)放在主線程當(dāng)中執(zhí)行正卧,同時確保在任務(wù)完成時進(jìn)行回調(diào)。常用的三種實現(xiàn)多線...
    adduct閱讀 375評論 0 1
  • 前段時間阿里招聘老年人很是火了一陣子跪解,大家被應(yīng)聘的老人震驚炉旷,我想說,我外婆就是這樣的人呀叉讥。 外婆今年七十多歲了窘行,外...
    陳曉娟_38db閱讀 1,032評論 9 6