iOS 多線程知識總結 GCD基礎知識

進程的基本概念:
     1.每個進程都是一個一個應用程序,都有獨立的內存空間,通常來講一個應用程序存在一個進程存在一個進程,但也有多個進程的狀況。
    2.同一個進程中的線程共享內存中內存中資源。
多線程的基本概念:
     1.每個程序都有一個主線程,程序啓動時建立(調用main函數來啓動)
     2.主線程的生命週期是和其餘應用程序綁定的,程序退出時,主線程也就中止了。
     3.多線程技術表示,一個應用程序有多個線程,使用多線程能提升CPU的使用效率,防止線程阻塞
    4.任何有可能阻塞主線程的任務不要在主線程中執行(例如訪問網絡)
 
線程使用不是無節制的:
       1.iOS中的主線程的堆棧大小是1M
       2.從第二個線程開始都是512KB
       3.以上這些數值不能經過編譯器開關或者線程api函數更改
只有主線程有直接修改UI的能力。
 
iOS的三種多線程技術:
       1.NSThread每一個NSThread對象對應一個線程,輕量級。
       2NSOperation/NSOperationQueue面向對象的線程技術。
       3.GCD——Grand Central Dispatch 是基於C語言的框架,能夠充分利用多核,也是蘋果官方推薦使用的多線程技術。
 
三種多線程技術的對比:
      1.NSThread:優勢:NSThread比其餘倆個輕量級,使用簡單。
                           缺點:須要本身管理線程的生命週期、線程同步、加鎖、睡眠以及喚醒等。線程同步對數據的加鎖會有必定的系統開銷
 
       2.NSOpertion:不須要關心線程管理,數據同步的事情,能夠把精力放在本身須要執行的操做上。NSOpertion是面向對象的。
 
      3.GCD:GCD是由蘋果開發的一個多核編程的解決方案。iOS4.0+才能使用,是替代NSThread,NSOperation的高效和強大的技術,GCD是基於C語言的

GCD是蘋果公司爲多核的並行運算提出的解決方案程序員

GCD會自動利用更多的CPU內核(好比雙核、四核)編程

GCD會自動管理線程的生命週期(建立線程、調度任務、銷燬線程)api

程序員只須要告訴GCD想要執行什麼任務,不須要編寫任何線程管理代碼
 
 GCD中有兩個核心概念:
(1)任務:執行什麼操做
(2)隊列:存聽任務
 
隊列:
 
 1.串行隊列:添加到隊列中的任務是一個一個執行的
 
 2.並行(發)隊列:添加到隊列中的任務是多個同時執行的
 
 3.主隊列:裏面的任務都是在主線程執行的,能夠理解爲主隊列就是串行隊列的一種
 
 4.全局隊列:並行(發)隊列
 
同步、異步:
 一、同步:須要後面的任務等待,不會開啓新的線程,會直接使用當前的線程
 
 二、異步:不須要後面的任務等待,會開啓新的線程

(1)用同步的方式執行任務 dispatch_sync(dispatch_queue_t queue, dispatch_block_t block); 網絡

參數說明: 多線程

queue:隊列 併發

block:任務 框架

 
  (2)用異步的方式執行任務 dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
 
3.同步和異步的區別

同步:在當前線程中執行 異步

異步:在另外一條線程中執行 async

說明:
同步函數不具有開啓線程的能力,不管是什麼隊列都不會開啓線程;異步函數具有開啓線程的能力,開啓幾條線程由隊列決定(串行隊列只會開啓一條新的線程,併發隊列會開啓多條線程)。

同步函數 函數

(1)併發隊列:不會開線程

(2)串行隊列:不會開線程

異步函數

(1)併發隊列:能開啓N條線程

(2)串行隊列:開啓1條線程

 

 

凡是函數中,各類函數名中帶有create\copy\new\retain等字眼,都須要在不須要使用這個數據的時候進行release。

GCD的數據類型在ARC的環境下不須要再作release。
CF(core Foundation)的數據類型在ARC環境下仍是須要作release。 
異步函數具有開線程的能力,但不必定會開線程
相關文章
相關標籤/搜索