一.同步和異步
同步和異步是任務執行的兩種方式
1.什麼是同步
我們之前寫程序的時候都是從上到下,代碼順序執行的
1個人執行多個任務,也是要依次執行,因爲1個人同一時間只能執行1個任務
多個任務按序依次執行,就是同步執行
1)同步的概念:必須等待當前語句執行完畢,纔可以執行下一個語句
2.什麼是異步
多個人同時執行多個任務
二.進程和線程
1.什麼是進程
進程是指在系統中正在運行的一個應用程序
每個進程之間是獨立的,每個進程均運行在其專用的且受保護的內存空間內
比如同時運行QQ 和 Xcode,系統會分別啓動兩個進程
通過“活動監視器”可以查看Mac系統中所開啓的進程
2.什麼是線程
1個進程可以有多個線程組成(1個進程至少要有1個線程)
線程是進程的基本執行單元,一個進程的所有任務都在線程中執行
比如聽音樂,發送QQ消息,接收QQ消息都要在線程中執行
三.多線程
1.什麼是多線程
多線程 : 1個進程中可以開啓多個線程,多個線程可以“同時”執行不同的任務
進程-公司,線程-員工,老闆是什麼?
多線程可以解決程序阻塞的問題
多線程可以提高程序的執行效率
2.多線程的執行原理
a. (單核CPU)同一時間,cpu只能處理1個線程,只有1個線程在執行任務
b. 多線程同時執行:是CPU快速的在多個線程之間的切換
c. cpu調度線程的時間足夠快,就造成了多線程的”同時”執行的假象
d. 如果線程數非常多,cpu會在n個線程之間切換,消耗大量的cpu資源
i. 每個線程被調度的次數會降低,線程的執行效率降低
3.多線程的優缺點
多線程的優點
能適當提高程序的執行效率
能適當提高資源的利用率(cpu,內存)
線程上的任務執行完成後,線程會自動銷燬
多線程缺點
開啓線程需要佔用一定的內存空間(默認情況下,每一個線程都佔512KB)
如果開啓大量的線程,會佔用大量的內存空間,降低程序的性能
線程越多,cpu在調用線程上的開銷就越大
程序設計更加複雜,比如多線程的數據共享、線程間的通信
4.主線程
一個程序運行後,默認會開啓1個線程,稱爲“主線程”或“UI線程”
主線程一般用來 刷新UI界面 ,處理UI事件(比如:點擊、滾動、拖拽等事件)
主線程使用注意
注意:**別將耗時的操作放到主線程中**
耗時操作會卡住主線程,嚴重影響UI的流暢度,給用戶一種卡的壞體驗
5.總結
實際上,使用多線程,由於會開線程,必然就會消耗性能,但是卻可以提高用戶體驗。所以,綜合考慮,在保證良好的用戶體驗的前提下,可以適當地開線程,一般開3-6條。
但是需要注意的是:實際上,無論是主線程還是子線程,默認的堆棧大小都是512KB。
官方文檔沒有及時更新。