概述
本系列文章將討論iOS中以下幾種多線程編程方式:
編程方式 | 語言 | 描述 | 出場率 | 線程週期 |
---|---|---|---|---|
Thread | OC/Swift | 輕量級, 簡單易用 | 中 | 手動管理 |
GCD | C | 可充分利用設備的多核 | 高 | 自動管理 |
Operation | OC/Swift | 基於GCD封裝, 添加了一些實用方法 | 高 | 自動管理 |
Pthreads | C | 可跨平臺使用 | 低 | 手動管理 |
進程(Process) 和 線程(Thread)
何爲進程?
進程是一個具有一定獨立功能的程序在一個數據集上的一次動態執行的過程, 是操作系統進行資源分配和調度的一個獨立單位, 是應用程序運行的載體. 進程是一種抽象的概念, 從來沒有統一的標準定義. iOS中, 一個App就是一個進程.
爲何進程可以並行運行?
CPU執行代碼都是順序執行的, 但由於系統可以讓各個進程(應用程序)快速地交替執行, 使得各個進程看起來是同時運行的. 只有多核CPU才能真正實現多個進程同時運行.
爲何要線程?
隨着計算機的發展, 對CPU的要求越來越高,進程之間的切換開銷較大,已經無法滿足越來越複雜的程序的要求了. 上帝說要有線程, 於是就有了線程.
何爲線程?
線程是程序執行中一個單一的順序控制流程, 是CPU調度和分派的基本單位, 它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
線程是進程的一部分, 一個進程中至少有一個線程.
爲何線程可以並行運行?
和進程一樣, 也是由於CPU在任務調度間快速切換.
主要區別?
進程是操作系統進行資源分配和調度的基本單位; 線程是CPU調度和分派的基本單位.
一圖以蔽之(圖片來源):