日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS 多线程 常驻线程,并发,内存问题

發布時間:2024/1/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS 多线程 常驻线程,并发,内存问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、常駐線程

001 常駐線程指的是那些一直存在于內存的線程。

002 通過NSRunloop添加runloop的方法有:

run方法。通過run方法添加runloop,會不斷重復調用runModel:beforeDate:方法來確保自己不會停止

runUntilDate和runModel:beforeDate:可以通過指定時間來停止runloop

003 如果每個庫都通過一個常駐線程這樣做不但不能提高CPU的利用率反而會降低執行效率,

004 解決方案:可以選擇使用 NSRunLoop 的另外兩個方法 runUntilDate: 和 runMode:beforeDate,來指定線程的保活時長。讓線程存活時間可預期,總比讓線程常駐,至少在硬件資源利用率這點上要更加合理。或者,你還可以使用 CFRunLoopRef 的 CFRunLoopRun 和 CFRunLoopStop 方法來完成 runloop 的開啟和停止,達到將線程保活一段時間的目的。

二、并發

?001?GCD(Grand Central Dispatch)是由蘋果公司開發的一個多核編程解決方案。它提供的一套簡單易用的接口,極大地方便了并發編程。同時,它還可以完成對復雜的線程創建、釋放時機的管理。

002 在類似于數據存儲這樣需要等待磁盤響應的任務的場景,隨著任務數量增加,GCD創建的新線程會越來越多,從而導致內存資源越來越緊張;

等到磁盤開始響應后再讀取數據會占用更多內存結果會引發內存問題

003 解決方案:并行隊列轉化為串行隊列來執行,避免大并發讀寫磁盤操作造成內存問題

三、內存問題

新建一個線程,系統還需要為這個進程空間分配一定的內存作為線程堆棧。堆棧大小是 4KB 的倍數。在 iOS 開發中,主線程堆棧大小是 1MB,新創建的子線程堆棧大小是 512KB。除了內存開銷外,線程創建得多了,CPU 在切換線程上下文時,還會更新寄存器,更新寄存器的時候需要尋址,而尋址的過程還會有較大的 CPU 消耗。所以,線程過多時內存和 CPU 都會有大量的消耗,從而導致 App 整體性能降低,使得用戶體驗變成差。CPU 和內存的使用超出系統限制時,甚至會造成系統強殺。這種情況對用戶和 App 的傷害就更大了。

總結

以上是生活随笔為你收集整理的IOS 多线程 常驻线程,并发,内存问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。