轉載地址:http://www.cnblogs.com/wendingding/p/3806821.html
1.線程與隊列
隊列可以看作對線程的封裝和替代方案,在GCD中,我們面對的是隊列,而不必直接去處理線程。
當我們將任務添加到隊列中,GCD會自動將隊列中的任務取出,放到對應的線程中執行。
注:任務的取出遵循隊列的FIFO原則:先進先出,後進後出。
2.同步和異步的區別(執行)
同步:在當前的線程中執行
異步:在另一條線程中執行
3.併發隊列和串行隊列
併發隊列:Concurrent Dispatch Queue
可以讓多個任務併發(同時)執行(自動開啓多個線程同時執行任務),併發功能只有在異步(dispatch_async)函數下有效。(嘗試一下)
串行隊列:Serial Dispach Queue
讓任務一個接着一個執行。(一個任務執行完畢後,再執行下一個任務)
主隊列:main dispatch queue 是一個全局可用的串行隊列,其在行用程序的主線程上執行任務。此隊列的任務和應用程序的主循環(run loop)要執行的事件源交替執行。因爲其運行在應用程序的主線程,main queue經常用來作爲應用程序的一個同步點.
4.同步任務和異步任務:實質上同步提交就是同步任務(dispatch_sync),異步提交就是異步任務(dispatch_async).
同步任務:會阻塞當前線程。(SYNC)
異步任務:不會阻塞當前線程.(ASYNC)