精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

不改一行業務代碼,飛書 iOS 低端機啟動優化實踐

精選
運維
本文將結合飛書啟動優化,給出選取 GCD 隊列的最佳實踐,也提供針對低端機的啟動優化思路。

作者|徐霜晴

引言

在啟動優化時,我們常常通過增加并發的方式來減輕主線程的耗時。而在 iOS 中,GCD 是并發編程最常用的框架。增加并發是否是啟動優化的良策?開發者適合選用哪個優先級的 GCD 隊列?本文將結合飛書啟動優化,給出選取 GCD 隊列的最佳實踐,也提供針對低端機的啟動優化思路。

應用此思路,我們在未修改飛書業務邏輯的情況下,在飛書低端機上,取得了不錯的用戶體驗收益:首屏展示時間優化 100ms,消息列表首刷時間優化 1500ms。

低端機的特性

通過 Instruments 的 App Launch 功能,我們能看到 App 啟動時的線程狀態、Time Profiler 等信息。其中,我們發現不同設備在啟動時的表現有很大差異。??

以 iPhone 7p(低端)和 iPhone 12(高端)舉例,它們的設備參數分別為:

設備


CPU 參數

實際核數

ProcessInfo.processInfo.activeProcessorCount

跑滿的 CPU 占比(Xcode 測試)

iPhone 7p


A10 芯片[1],2 高性能 + 2 低功耗,但是只有 2 核能同時工作

2


200%


iPhone 12

A14 芯片[2],2 高性能 + 4 低功耗

6

600%


啟動飛書時,我們通過 Instruments 觀察兩個設備的線程狀態,經過統計發現,iPhone 7p 上,主線程 Preempted 和 Runnable 狀態的占比高達 21%。Instruments 的圖中能看到主線程大片被搶占。

圖片

一個典型的局部,能看到主線程是 preempted 狀態,CPU0 在執行其他進程,CPU1 在執行 GCD 線程。

而 iPhone 12,主線程 Preempted 和 Runnable 狀態占比則只占 1%從這里我們能發現:對低端機來說,CPU 已經成為了啟動的瓶頸,“增大并發”已不是一個萬能的啟動優化措施,而想辦法減少其他線程對主線程的搶占,可能會是優化思路。

GCD queue 對主線程的搶占評測

為了評估“減少其他線程對主線程的搶占”是否是一個可行的優化思路,我們首先需要弄明白,主線程被搶占的程度會有多大?

我們可以使用 Demo 制造一些極端場景,了解極端場景下,主線程有多少比例會被其他線程搶占,因此有了如下 Demo 實驗:

實驗組1:

  • 異步線程 QoS:DispatchQoS.userInteractive

代碼:

for _ in 1...100 {
let queue = DispatchQueue.init(label: "serialQueue", qos: .userInteractive)
queue.async {
while true {
}
}
}
while true {
}
  • qos_class_self 數值:33
  • 主線程 Preempted + Runnable 占比:74%

實驗組2:

異步線程 QoS:不指定 QoS 或 DispatchQoS.userInitiated

代碼:

for _ in 1...100 {
let queue = DispatchQueue.init(label: "serialQueue")
queue.async {
while true {
}
}
}
while true {
}
  • qos_class_self 數值:25
  • 主線程 Preempted + Runnable 占比:73%

實驗組3:

  • 異步線程 QoS:DispatchQoS.utility?
  • 代碼:
for _ in 1...100 {
let queue = DispatchQueue.init(label: "serialQueue", qos: .utility)
queue.async {
while true {
}
}
}
while true {
}
  • qos_class_self 數值:17
  • 主線程 Preempted + Runnable 占比:1.3%

實驗組4:

  • 異步線程 QoS:DispatchQoS.background?
  • 代碼:
for _ in 1...100 {
let queue = DispatchQueue.init(label: "serialQueue", qos: .background)
queue.async {
while true {
}
}
}
while true {
}
  • qos_class_self 數值:9
  • 主線程 Preempted + Runnable 占比:1.3%?

不指定 QoS 下,一個極端 Demo,啟動期間主線程長時間處于 preempted 狀態,一直無法得到 running 的機會

圖片

從中我們能看到幾個結論:

  1. 不指定 QoS 時,自行創建的 GCD queue 的 QoS 是 User-Initiated
  2. User-Initiated 及以上優先級,對主線程會有嚴重搶占現象;而 Utility 和 Background 則幾乎不會搶占主線程。

另外,我們也做測試驗證了,pthread_create 創建的線程,也有類似的搶占現象。

QoS 和 Priority

看到 iPhone 7p 上主線程被其他線程搶占,我們可能會有疑問:主線程不應該是優先級最高的么?怎么還會被其他線程搶占?

這里,我們需要理解一下 QoS 和線程 priority 兩個概念。

QoS(quality of service)意指服務質量,它影響線程優先級(priority),也影響 I/O 吞吐、 CPU 吞吐等指標[3]。開發者可以用 qos_class_self() 接口獲得當前線程 / 隊列的 QoS。

蘋果對于每個任務應該選用哪個 QoS,也有一些指導意見[4]:

圖片

QoS 和 priority 確實有對應關系,參考 xnu 源碼和實驗結果,對應關系為:?

QoS

Priority

User-Interactive

46,對于 UI 線程是 47

User-Initiated

37

Utility

20

Background

4

同時,線程的 priority 會隨著執行動態調整。測試中我們會發現,主線程的 priority 在運行開始時是 QoS User-Interactive 對應的 47,但隨著運行會出現下降的情況。

圖片

官方文檔[5]中解釋了線程 priority 變化的原因,priority 由 Mach scheduler 控制,為了防止計算密集的線程壟斷資源,各個線程的 priority 會實時調整。

All of these mechanisms are operating continually in the Mach scheduler. This means that threads are frequently moving up or down in priority based upon their behavior and the behavior of other threads in the system.

進一步閱讀 xnu 內核的源碼[6],我們發現,線程 priority 的變化,是由各個 Mach scheduler 實現的 compute_timeshare_priority 接口控制的。在 iOS 使用的 Mach scheduler 中,compute_timeshare_priority 為同一個實現 sched_compute_timeshare_priority。線程調度時的 priority,會在線程固有 priority 的基礎上,結合當前線程的 CPU 占用情況和當前設備的整體負載進行調整。

在這個實現中,我們能看到 Mach scheduler 對 priority 的調整會有一個極限:對于原先 priority = 47 的線程來說,向下調整的極限是 47 - ((BASEPRI_FOREGROUND - BASEPRI_DEFAULT) + 2) = 29。這和我們用多個設備測試到的結果吻合:主線程執行時,priority 的最低值是 29,依然高于 Utility 對應的 priority 20。

這也解釋了,為什么 Demo 中當異步線程的 QoS 是 Utility 時,就幾乎無法對主線程造成搶占。

優化落地

通過 Demo 實驗,一個啟動優化思路產生了:在飛書中,大量異步隊列的 QoS 是 User-Initiated,盡管這一 QoS 低于主線程的 User-Interactive,但依然可能對主線程造成搶占;那么,如果將異步隊列的 QoS 調低到 Utility,是不是就可以優先保障主線程執行,讓首屏更早展現出來?

經過一些粗暴的實驗,我們證實了飛書在這個思路上存在優化空間。但另一個問題隨之而來:如何兼顧首屏、消息列表首刷等多個指標?

考慮消息列表首刷的場景:獲取到最新的消息,不僅僅需要主線程構建 UI,還需要依賴數據庫讀取、網絡請求等異步操作。如果我們粗暴地將所有異步隊列的 QoS 調低,首屏確實能更快展現,但消息列表的首刷則隨著異步操作的變慢更劣化了。這對用戶體驗反而帶來了負向影響。

梳理出哪些異步操作是首刷依賴的,確保這些隊列的 QoS ,是優化中非常重要的一環。我們首先通過不斷用 Instruments 測試、閱讀代碼梳理出了首版白名單隊列,并在線下和線上驗證了首屏、首刷等關鍵指標的優化收益。在后來的迭代中,我們又開發了線下工具,通過在線下 hook dispatch_async 等函數,記錄下首刷等時機依賴的 GCD 隊列,達成了白名單隊列自動生成的能力。

效果分析

這一優化在線上產生了不錯的體驗優化效果:

啟動首屏展現時間優化 100ms

通過調整異步線程的 QoS,啟動期間主線程 CPU 搶占現象有明顯降低。更多計算資源集中到主線程,使得首屏展示速度明顯加快。

消息列表首刷時間優化 1500ms

通過對消息列表首刷依賴的任務的分析,我們調低了無關線程的 QoS,這也讓首刷依賴的數據庫讀取、網絡請求等任務得到了更多資源,加速了它們的執行。

總結

“增加并發”在一定范圍內可以作為啟動優化的方案,但在低端機上,CPU 已經成為瓶頸,并發時異步線程對主線程的搶占也需要引起重視。

GCD 提供了四種 QoS 給開發者使用,官方也為這四種 QoS 提供了最佳實踐建議。

經過評測和源碼推理,User-Interactive 和 User-Initiated 對主線程有明顯搶占,Utility 和 Background 對主線程的搶占極少。開發者創建的 GCD 隊列,默認的 QoS 實際為 User-Initiated。因此在啟動期間(或者任何耗時敏感期間),與啟動無直接關系的 queue,應該主動設置為 Utility 或 Background,減少對主線程的搶占。

通過飛書上落地優化,我們能得出結論:對線程或 GCD queue 調整 QoS,能在不改變啟動業務邏輯的情況下取得顯著收益。

當然,比事后優化更好的操作,是在編碼時就充分了解不同 QoS 的行為特性,選用最適合的 QoS。?

責任編輯:未麗燕 來源: 字節跳動技術團隊
相關推薦

2024-08-16 14:28:21

2016-12-02 08:53:18

Python一行代碼

2017-11-20 14:46:27

命令代碼

2021-06-11 14:15:55

代碼前端項目

2017-04-05 11:10:23

Javascript代碼前端

2022-04-09 09:11:33

Python

2014-02-12 13:43:50

代碼并行任務

2021-12-29 09:34:49

Log4j漏洞代碼

2020-09-09 16:00:22

Linux進程

2021-11-02 16:25:41

Python代碼技巧

2020-08-19 10:30:25

代碼Python多線程

2017-04-13 19:20:18

Python代碼并行任務

2021-08-31 09:49:37

CPU執行語言

2023-09-12 10:10:57

開發者工具開源

2023-08-09 17:35:11

開源模型

2020-09-28 12:34:38

Python代碼開發

2019-12-25 14:08:50

Pandas數據計算

2020-08-12 14:54:00

Python代碼開發

2024-07-11 07:02:01

2017-01-23 21:05:00

AndroidApp啟動優化
點贊
收藏

51CTO技術棧公眾號

亚洲美女av网站| 亚洲精品国产a久久久久久| 日av在线播放中文不卡| 日本一二三不卡视频| 日韩五码电影| 亚洲.国产.中文慕字在线| 欧美日韩精品久久| 国产女同91疯狂高潮互磨| 亚洲大胆av| 中文字幕日韩欧美| 久久精品女同亚洲女同13| 免费观看成人性生生活片 | 国产大片免费看| 偷拍亚洲色图| 欧美一区二区三区啪啪| 欧美激情国产精品日韩| 国产cdts系列另类在线观看| 91在线播放网址| 91日本在线观看| aaaaaa毛片| 伊人成人网在线看| 日韩亚洲成人av在线| 国产黄色网址在线观看| 日本精品在线观看| 欧美视频日韩视频| 日本三级免费观看| 国产盗摄在线视频网站| 亚洲欧美在线另类| 日韩精品欧美专区| 好吊色在线观看| 国产一区二区在线免费观看| 国产精品aaa| av黄色在线播放| 国户精品久久久久久久久久久不卡| 在线观看精品国产视频| 人妻熟女aⅴ一区二区三区汇编| 欧美影院精品| 717成人午夜免费福利电影| 欧美在线观看视频网站| 深夜福利视频一区二区| 午夜精品福利一区二区三区av| 日日噜噜夜夜狠狠久久丁香五月| aaa日本高清在线播放免费观看| 99热99精品| www.久久爱.cn| 99在线精品视频免费观看20| 久久精品国产成人一区二区三区 | 成人激情免费电影网址| 亚洲一区二区三区四区在线播放 | 日本一区二区三区www| 天堂网在线观看视频| 丁香网亚洲国际| 丁香婷婷久久久综合精品国产| 99国产在线播放| 国产一区二区调教| 91丝袜脚交足在线播放| 好吊视频一二三区| 91在线精品一区二区三区| 精品一区二区三区国产| 午夜视频福利在线| 久久五月婷婷丁香社区| 欧美一区二区综合| 成人不用播放器| 国产精品不卡一区二区三区| 中文字幕不卡每日更新1区2区| 欧美日本一道| 夜色激情一区二区| 91免费黄视频| 日韩成人动漫| 欧美日韩国产另类一区| 下面一进一出好爽视频| 136福利精品导航| 亚洲精品www久久久| 日本黄色特级片| av一区二区在线观看| 色视频www在线播放国产成人| 日本高清不卡免费| 国自产拍偷拍福利精品免费一 | 国产成人无码精品亚洲| 久久亚洲图片| 91网在线免费观看| 欧美一级特黄aaaaaa| 久久女同性恋中文字幕| 伊人久久大香线蕉午夜av| 午夜小视频福利在线观看| 欧美日韩国产综合新一区| 香蕉视频禁止18| 中文久久电影小说| 亚洲欧美激情精品一区二区| 青青青手机在线视频| 欧美日韩a区| 日韩免费观看av| 国产伦精品一区二区三区四区| 成人午夜又粗又硬又大| 少妇精品久久久久久久久久| 国产黄色在线网站| 黑人巨大精品欧美一区二区三区| 亚洲污视频在线观看| 99久久香蕉| 中文日韩电影网站| 国产五月天婷婷| 久久国内精品视频| 极品日韩久久| 超碰免费公开在线| 色婷婷av一区二区三区之一色屋| 亚洲制服在线观看| 精品毛片免费观看| 欧美精品免费播放| 中文字幕一区2区3区| 成人高清视频免费观看| 91香蕉视频网址| 欧洲一级精品| 亚洲国产一区二区三区四区| 国产黄色录像视频| 亚洲精品影视| 91精品久久久久久蜜桃| 9色在线视频网站| 日韩欧美中文字幕在线播放| 欧美午夜精品一区二区| 91综合在线| 国产精品激情av在线播放| 色窝窝无码一区二区三区成人网站 | 国产99视频精品免费视频36| av网在线观看| 欧美小视频在线| 久久久久成人精品无码中文字幕| 一区二区影视| 成人黄色av网站| chinese偷拍一区二区三区| 欧美午夜片在线免费观看| 精品人妻一区二区免费| 亚洲女同中文字幕| 成人春色激情网| av网站在线免费观看| 在线免费一区三区| 日韩人妻一区二区三区| 国产视频一区三区| 国产精品乱码| 51av在线| 亚洲白拍色综合图区| 久久久久久天堂| 岛国一区二区在线观看| 少妇大叫太大太粗太爽了a片小说| 成人噜噜噜噜| 精品国内产的精品视频在线观看| 亚洲系列在线观看| 国产精品福利一区二区三区| 向日葵污视频在线观看| 日本不卡高清| 国产女人18毛片水18精品| 69视频在线观看| 欧美精品xxxxbbbb| 丁香花五月激情| 国产69精品久久久久毛片| 国产成人在线小视频| 国产伦理久久久久久妇女| 久久久久久一区二区三区 | 亚洲精品第一页| 亚洲日本韩国在线| 国产亚洲一区字幕| 亚洲 激情 在线| 国产精品毛片久久| 操人视频欧美| 色一区二区三区| 亚洲性生活视频在线观看| 在线观看色网站| 亚洲欧美日韩综合aⅴ视频| 中文字幕一区二区三区人妻在线视频| 好看的av在线不卡观看| 久久爱av电影| 黄色日韩网站| 欧美多人乱p欧美4p久久| 日韩中文字幕观看| 色av一区二区| 国产日韩欧美在线观看视频| a亚洲天堂av| 免费男同深夜夜行网站| 99久久精品国产亚洲精品| 97伦理在线四区| 伊人成综合网站| 视频在线观看99| 天堂在线视频网站| 欧美日韩精品一区二区三区| 久久久一二三区| 久久精品日韩一区二区三区| 精品亚洲视频在线| 国产欧美一级| 在线视频一二三区| 婷婷国产精品| 91精品视频大全| 色是在线视频| 欧美福利视频在线| 成年女人的天堂在线| 日韩欧美123| 中文字幕一区二区三区四区免费看 | 精品国产综合久久| 免费高清视频在线一区| 欧美黑人xxxⅹ高潮交| 国产黄在线播放| 亚洲成人免费网站| 国产又大又黄的视频| 欧美性开放视频| 男人操女人的视频网站| 国产欧美一区二区精品仙草咪 | 国产亚洲精品aa| 亚洲欧美综合视频| 精品一区二区三区免费播放| 欧美日韩在线视频一区二区三区| 在线中文字幕亚洲| 日本在线观看一区二区| 国产精品网在线观看| 91理论片午午论夜理片久久| 怡红院成人在线| 97国产真实伦对白精彩视频8| 免费在线观看黄色网| 亚洲人成电影网站色…| 色综合久久久久久| 日韩欧美亚洲国产另类| 亚洲熟妇av乱码在线观看| 色综合久久天天| 日韩三级视频在线| 一二三区精品福利视频| a级黄色片免费看| 成人免费在线视频观看| 国产熟女一区二区| 久久久精品日韩欧美| 日本丰满少妇裸体自慰| 成人毛片视频在线观看| 精品人妻无码中文字幕18禁| 精品在线视频一区| 超碰成人在线播放| 蜜桃久久av一区| 亚洲狼人综合干| 久久亚洲不卡| 青青青国产在线视频| 天堂成人国产精品一区| avav在线看| 久久久国产精品一区二区中文| 热99这里只有精品| 99精品欧美| 日本免费不卡一区二区| 亚洲久久视频| 久久久一本二本三本| 91久久综合| 国产欧美在线一区| 久久国产主播| 自拍偷拍 国产| 久久av中文字幕片| 三级网站免费看| 懂色av中文字幕一区二区三区| 精品无码av一区二区三区不卡| 国产一区二区日韩精品| 337p日本欧洲亚洲大胆张筱雨| 国产不卡视频在线观看| 国产视频精品视频| 91亚洲精品久久久蜜桃网站| 巨胸大乳www视频免费观看| 久久精品人人爽人人爽| 麻豆一区在线观看| 伊人婷婷欧美激情| 日本学生初尝黑人巨免费视频| 亚洲www啪成人一区二区麻豆| 日本少妇全体裸体洗澡| 欧美日韩在线免费| 久久久999久久久| 7777精品伊人久久久大香线蕉经典版下载| 国产精品日韩无码| 精品久久久久久久久久久久久久久| 欧美一区二区黄片| 精品中文视频在线| 午夜小视频在线| 欧美成人三级视频网站| 成年人在线网站| 国产999精品| 国产一区二区三区视频在线| 国产精品免费一区二区三区四区| 牲欧美videos精品| 亚洲欧美国产精品桃花| 国内精品美女在线观看| 久久国产色av免费观看| 极品少妇xxxx精品少妇偷拍| 在线观看免费视频国产| 久久久精品天堂| 欧美性猛交xxxxx少妇| 色呦呦一区二区三区| 国产麻豆精品一区| 亚洲精品日韩丝袜精品| 91精品国产91久久久久游泳池| 久久国产精品首页| 筱崎爱全乳无删减在线观看 | 国产乱码精品一区二区三区精东| 亚洲国产成人爱av在线播放| chinese偷拍一区二区三区| 国外成人在线直播| 四虎国产精品永久在线国在线| 国产精品视频免费一区| 久久亚洲影视| 人妻熟女一二三区夜夜爱| 国产精品一区不卡| 久久中文字幕精品| 精品久久久久久国产91| 97超碰国产在线| 亚洲欧美另类人妖| 青青青国内视频在线观看软件| 国产精品海角社区在线观看| 加勒比视频一区| av不卡在线免费观看| 久久久久久久欧美精品| 无码人妻丰满熟妇啪啪网站| 国产精品视频免费| 在线精品免费视| 日韩美女视频一区二区在线观看| av在线天堂| 日韩av日韩在线观看| 红杏成人性视频免费看| 一二三四中文字幕| 久久99精品久久久久久动态图| 玖玖爱在线观看| 调教+趴+乳夹+国产+精品| 99精品在线看| 日韩在线观看成人| 巨胸喷奶水www久久久| 欧美黄色直播| 亚洲永久免费| 波多野结衣视频播放| 一级中文字幕一区二区| 国产欧美综合视频| 色综合影院在线| 黑人一区二区三区| 天堂av一区二区| 日韩综合小视频| 亚洲综合色一区| 色综合久久九月婷婷色综合| 四虎影院在线播放| 97视频网站入口| 亚洲欧洲av| 成人观看免费完整观看| 久久久99精品免费观看| 国产黄网在线观看| 亚洲精品一区中文字幕乱码| 亚洲精华液一区二区三区| 黑人另类av| 国产美女诱惑一区二区| 37p粉嫩大胆色噜噜噜| 欧美日韩在线视频一区| 婷婷婷国产在线视频| 91干在线观看| 中文字幕伦av一区二区邻居| 成人观看免费完整观看| 国产午夜三级一区二区三| 国产美女www| 日韩专区在线观看| 国产精品日本一区二区三区在线| 国产日韩第一页| 国产成人精品免费在线| 日本在线免费观看| 亚洲剧情一区二区| 第四色男人最爱上成人网| 亚洲免费视频一区| 精品亚洲成a人在线观看 | 欧美日本一区二区高清播放视频| 爱情岛论坛亚洲自拍| 亚洲成年人影院| 久久天堂电影| 成人免费视频97| 国模大胆一区二区三区| 一级性生活毛片| 欧美日韩一区不卡| 青草视频在线免费直播 | 欧美性xxxx极品hd满灌| 国产福利在线| 91亚洲国产成人久久精品网站 | 亚洲欧美在线另类| 秋霞欧美在线观看| 国产精品福利无圣光在线一区| 国产精品国产一区| 亚洲色图欧美另类| 在线看日韩精品电影| 性xxxxfjsxxxxx欧美| 欧美极品一区二区| 国产在线视频一区二区三区| 国产无码精品视频| 亚洲最新av在线网站| 综合中文字幕| 成人中文字幕av| 一级日本不卡的影视| 国产高清视频免费最新在线| 亚洲直播在线一区| 久久中文欧美| 免费三片在线播放| 国产亚洲综合久久| 国产91精品入| 亚洲视频第二页| 图片区小说区国产精品视频| 午夜在线免费观看视频| 久草一区二区| 国产成人av电影在线观看| 国产精品第6页| 91黄色8090| 欧美人与禽猛交乱配视频|