1.GCD有一個底層線程池,這個池中存放的是一個個的線程。之所以稱為“池”,很容易理解出這個“池”中的線程是可以重用的,當一段時間后這個線程沒有被調用胡話,這個線程就會被銷毀。注意:開多少條線程是由底層線程池決定的(線程建議控制再3~5條),池是系統自動來維護,不需要我們程序員來維護(看到這句話是不是很開心?) 而我們程序員需要關心的是什么呢?我們只關心的是向隊列中添加任務,隊列調度即可。
2.如果隊列中存放的是同步任務,則任務出隊后,底層線程池中會提供一條線程供這個任務執行,任務執行完畢后這條線程再回到線程池。這樣隊列中的任務反復調度,因為是同步的,所以當我們用currentThread打印的時候,就是同一條線程。
3.如果隊列中存放的是異步的任務,(注意異步可以開線程),當任務出隊后,底層線程池會提供一個線程供任務執行,因為是異步執行,隊列中的任務不需等待當前任務執行完畢就可以調度下一個任務,這時底層線程池中會再次提供一個線程供第二個任務執行,執行完畢后再回到底層線程池中。
4.就對線程完成一個復用,而不需要每一個任務執行都開啟新的線程,也就從而節約的系統的開銷,提高了效率。在iOS7.0的時候,使用GCD系統通常只能開5~8條線程,iOS8.0以后,系統可以開啟很多條線程,但是實在開發應用中,建議開啟線程條數:3~5條最為合理。
by:李明