多線程是開發中一個很重要的模塊,但在不少時候,尤爲是剛開始開發時理解的不是很透徹,只有在慢慢地積累後,才能更好地理解它。在如今閒的時候,我就把個人理解說一下。微信
本篇文章就先講一下一些概念,接下來的幾篇文章會分開講述多線程的詳細內容。多線程
容易混淆繞暈的概念:併發
進程:進程是線程的容器,你打開一個APP就是打開了一個進程。微信有微信的進程,微博有微博的進程。一個進程能夠包含多個線程。異步
通俗理解進程就是一條高速公路,線程就是高速路上的一條條車道。也就是由於這些車道,整個交通的運行效率變得更高,也正是覺得有了多線程,系統的運行效率變得更高。spa
線程:線程是在進程中咱們開闢的一條條爲咱們作事的進程實體,通俗來講,線程就是咱們在進程上開闢的一條條作咱們想作的事的通道。一條線程在一個時間點上只能作一件事,多線程在同一時間點上就能作多件事。線程
通俗理解一條高速公路是一個進程,一條條車道就是不一樣的線程,再過收費站時,這條進程要是隻有一條線程,即一條高速公路上只有一個車道,那就只能排隊一輛一輛經過,同一時間不能有兩輛車一塊兒過去。可是若是一個進程上有多個線程,即一條高路公路上有多個車道,這樣同一時間就徹底可能有多輛車一塊兒經過了。blog
同步線程:同步線程會阻塞當前的線程去執行同步線程裏面想作的任務,執行完以後纔會返回當前線程。隊列
異步線程:異步線程不會阻塞當前的線程去執行異步線程裏想作的任務,由於是異步,因此他會從新開啓一個線程去作任務。進程
隊列:隊列是用來管理下面所說的任務的,它採用的是先進先出(FIFO)的原則,他衍生出的就是並行和串行隊列,一個線程上能夠有多個隊列。內存
並行隊列:這個隊列裏的任務是能夠併發(同時)執行的,因爲同步執行任務不會開啓新的線程,因此並行隊列同步執行任務只會在一條線程裏面同步執行任務。又因爲同步執行也就在在當前線程中作事,這是就須要一件一件的作任務(作完一個在作下一個)。單要是併發隊列異步執行,就對應着開啓異步線程執行要作的任務,就會同一時間有不少的任務被作着。
串行隊列:這個隊列裏的任務是串行,也就是一件件執行的,串行同步會一件一件的等任務作完再接着作下一件,要是異步就會開啓一條新的線程串行執行咱們的任務。
任務:就是咱們須要作的事。
同步任務:不須要開啓新的線程,在當前線程執行就能夠。
異步任務:須要開闢一個新的線程去異步的執行這個任務。
iOS中還有一個特殊的串行隊列--主隊列,這個主隊列中還有一個特殊的線程--主線程。
主線程:又名UI線程,顧名思義主要的任務就是及時處理UI,也只有主線程有處理UI的能力,其餘的耗時操做咱們就放在子線程(即開闢線程)去執行,開線程也會佔據必定的內存,因此不要同時開啓不少個線程。