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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

4.0 多线程基础篇

發布時間:2023/12/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.0 多线程基础篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

本文并非最終版本,如有更新或更正會第一時間置頂,聯系方式詳見文末

?

如果覺得本文內容過長,請前往本人 “簡書

?

?

4.0-1.1 進程

  • 概念 : 進程是指在系統中正在運行的一個應用程序 (操作系統中每一個 APP 就是一個進程)  
  • 性質 : 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內

    進程為應用程序開辟獨立的內存空間;(這塊內存空間是獨立的,受保護的!進程和進程之間是互不干擾的!)

  • 舉例 : 比如同時打開QQ、Xcode,系統就會分別啟動2個進程
  • 查看進程 : 通過“活動監視器”可以查看Mac系統中所開啟的進程
  • 所有的 UI 操作和 UI 事件都是進程

?

4.0-1.2 線程
  • 1個進程要想執行任務,必須得有線程(每1個進程至少要有1條線程)
  • 線程是進程的基本執行單元,一個進程(程序)的所有任務都在線程中執行(?線程執行進程/應用程序中的代碼)
舉例 :?比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執行
  • 主線程:在一個應用程序啟動之后,會默認開啟一條線程
  • 子線程:主線程之外的線程(手動開啟的)
單個線程 - 串行:
概念 : 1個線程中任務的執行是串行的(在線程中的代碼是按順序執行的!同一時間內,只能有一個代碼塊執行!)
解析 : 如果要在1個線程中執行多個任務,那么只能一個一個地按順序執行這些任務 也就是說,在同一時間內,1個線程只能執行1個任務
舉例 :?比如在1個線程中下載3個文件(分別是文件A、文件B、文件C), 只能一個一個的下載
總結 :?因此,也可以認為線程是進程中的1條執行路徑
問題:為什么開啟一條新線程之后就能解決卡住主線程這個問題了呢? 答: 因為線程和線程之間是并發執行(同時執行)!
多個線程 - 并行:多線程
概念 :?1個進程中可以開啟多條線程,每條線程可以并行(同時)執行不同的任務
優點 :?多線程技術可以提高程序的執行效率
舉例 :?比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C), 則分別同時下載
4.0-1.3 【區別】進程 & 線程 進程是由許多條線程組成,一個進程可以包含很多條線程,每條線程都可以執行不同的代碼! 進程與線程的區別:
(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位
(2)并發性:不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源.
(4)系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。
4.0-2.1 多線程原理 多線程原理:(為什么多條線程之間可以并發(同時)執行呢?)
本質 :?同一時間,CPU只能處理1條線程,只有1條線程在工作(執行) 多線程并發(同時)執行,其實是CPU快速地在多條線程之間調度(切換)
原理 :?如果CPU調度線程的時間足夠快,就造成了多線程并發執行的假象
思考:如果線程非常非常多,會發生什么情況? 答案 : 如果線程非常多,會在多條線程之間來回切換,消耗大量的 CPU 資源
  • 每個線程被調度的次數會降低
  • 線程的執行效率會下降
CPU會在N多線程之間調度,CPU會累死,消耗大量的CPU資源 每條線程被調度執行的頻次會降低(線程的執行效率降低)

iOS 8.0 主線程的默認堆棧大小也是 512K

4.0-2.2 多線程優缺點 多線程的優點 :
(1) 能適當提高程序的執行效率:
  • ?并發執行(同時執行): 線程和線程之間是同時執行的!(不同的線程中,任務同時執行) ?
(2) 能適當提高資源利用率(CPU、內存利用率)
多線程的缺點 : (既然多線程這么爽, 線程是不是越多越好呢?)
(1) 開啟線程需要占用一定的內存空間(默認情況下,主線程占用1M,子線程占用512KB的棧區空間),如果開啟大量的線程,會占用大量的內存空間,降低程序的性能
(2) 線程開啟越多,CPU 就需要在多條線程之間來回切換,CPU在調度線程上的開銷就越大,CPU就越累!
(3) 開啟線程會提高代碼的復雜性(會使應用程序增加很多代碼!代碼變多之后,程序復雜性就會提高!) 程序設計更加復雜:比如線程之間的通信、多線程的數據共享
建議: 在移動應用的開發中; 一般只開3~5條線程! 4.0-2.3 多線程在iOS開發中的應用 主線程 /?UI線程:
概念 :?一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程” (程序啟動創建的線程)
作用 :?
  • 顯示 / 刷新UI界面
  • 處理UI事件(比如點擊事件、滾動事件、拖拽事件等)
使用注意 :?
  • 別將比較耗時的操作放到主線程中
  • 要將耗時操作放在后臺線程執行,否則會影響 UI 的流暢度,給用戶一種'卡頓'的壞體驗,破壞用戶體驗
  • 所有網絡訪問都是耗時操作!
解決方案 :
  • 將耗時操作放在子線程(后臺線程、非主線程)
  • 那樣就不會阻塞我們的主線程 ,?一般開 3 ~ 6 條線程 ?
好處 :
  • 在用戶點擊按鈕那一刻就有反應
  • 能同時處理耗時操作和用UI控件的事件
4.0-2.4 iOS中多線程的實現方案
如果你覺得本篇文章對你有所幫助,請點擊右下部“推薦”,^_^
? 作者:藍田(Loto)
出處:http://www.cnblogs.com/shorfng/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。 ?
如有疑問,請發送郵件至?shorfng@126.com?聯系我。 ? ?

轉載于:https://www.cnblogs.com/shorfng/p/5315593.html

總結

以上是生活随笔為你收集整理的4.0 多线程基础篇的全部內容,希望文章能夠幫你解決所遇到的問題。

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