iOS 多線程系列 -- 基礎(chǔ)概述
iOS 多線程系列 -- pthread
iOS 多線程系列 -- NSThread
iOS 多線程系列 -- GCD全解一(基礎(chǔ))
iOS 多線程系列 -- GCD全解二(常用方法)
iOS 多線程系列 -- GCD全解三(進(jìn)階)
iOS 多線程系列 -- NSOperation
測試Demo的GitHub地址
基本概念:
- 進(jìn)程:
- 一個(gè)正在運(yùn)行的應(yīng)用程序
- 線程:
- 線程有時(shí)被稱為輕權(quán)進(jìn)程(lightweight process),因?yàn)榫€程比進(jìn)程“輕權(quán)”,一般來說,創(chuàng)建一個(gè)線程要比創(chuàng)建一個(gè)進(jìn)程快很多
- 一個(gè)進(jìn)程想要執(zhí)行任務(wù),必須要有至少一個(gè)線程,APP啟動(dòng)以后,默認(rèn)會(huì)有一個(gè)主線程
- 線程的串行:
- 同一個(gè)線程中,任務(wù)的執(zhí)行是串行的,也就是說同一時(shí)間內(nèi)只能執(zhí)行一個(gè)任務(wù),且按順序執(zhí)行任務(wù)
- 線程的組成部分:
- Thread ID 線程ID
- Stack 棧
- Policy 優(yōu)先級
- Signal mask 信號碼
- Errno 錯(cuò)誤碼
- Thread-Specific Data 特殊數(shù)據(jù)
多線程
-
多線程的并行:
- 一個(gè)進(jìn)程中,可以開啟多個(gè)線程,同一時(shí)間內(nèi)可以同時(shí)執(zhí)行多個(gè)線程,這就是多線程的并行
- 多線程原理:
- 其實(shí)并不是同時(shí)運(yùn)行,是cpu在這幾個(gè)線程之間快速的切換,當(dāng)切換的速度太快了,看起來像是在同時(shí)運(yùn)行
- 線程的創(chuàng)建和銷毀以及線程間切換都需要額外的性能開銷,所以線程并不是越多越好,否則可能造成效率下降
-
多線程的優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):
- 提高cpu等資源使用率,
- 提高程序的執(zhí)行效率
- 缺點(diǎn)
- 每創(chuàng)建一個(gè)線程是會(huì)占用資源的,比如內(nèi)存開銷等
- 線程太多,會(huì)降低程序的性能
- 程序開發(fā)復(fù)雜度上升
- 優(yōu)點(diǎn):
主線程
主線程
- 程序運(yùn)行后,默認(rèn)開啟的一條進(jìn)程,叫做主進(jìn)程(UI進(jìn)程)
主線程的用處:
- 用于刷新UI界面
- 處理UI事件(用戶點(diǎn)擊,滾動(dòng)等)
主線程使用注意:
- 注意不要放消耗時(shí)間多的代碼,這種需要較長處理時(shí)間的復(fù)雜任務(wù)代碼要放在子線程
- 如果主線程執(zhí)行這些比較耗時(shí)的代碼,會(huì)導(dǎo)致UI卡頓
OC中多線程技術(shù)分類:
- PThread 很少用到,C語言 自己管理線程釋放
- NSThread 很少用到, oc語言 自己管理線程釋放
- GCD 常用, C語言 自動(dòng)管理線程釋放
- NSOperation 常用,GCD的封裝 自動(dòng)管理線程釋放