線程:簡單的說就是處理事務的任務鏈,當只有一條鏈,所有的事情都在這一條鏈上執行時,那就是單線程,單線程有很多缺點,就是當執行某個耗時或者不能立即完成的任務時,比如:網絡通訊、復雜運動,該線程就會暫時停止對其他任務的響應和處理,造成的視覺效果就是程序的“假死”,也就是應用程序被卡在那里無法繼續執行,因此在多數情況下,單線程的應用很少。而當有多條鏈時,那就是多線程了,當然并不是說多條線并行,而是說有一條主線程,處理整個程序任務的主方向的鏈,而其鏈上又有許許多多的分支,就像樹枝那樣,這樣,既有了主線程去處理那些主要任務,又有了那些細小線程去處理耗時費力任務,從而讓界面看起來更加流暢。iOS平臺對多線程的支持iOS平臺提供了非常優秀的多線程支持,程序可以通過非常簡單的方式來啟動多線程,iOS平臺不僅提供了NSThread類來創建多線程,還提供了GCD方式來簡化多線程編程,提供了NSOperation和NSOperationQueue支持多線程編程。
線程和進程幾乎所有的操作系統都支持同時運行多個任務,一個任務通常就是一個程序,每個運行中的程序就是一個進程。? 當一個程序運行時,內部可能包含了多個順序執行流,每個順序執行流就是一個線程。
幾乎所有的操作系統都支持進程的概念,所有運行中的任務通常對應一個進程(Process)。當一個程序進入內存,運行后,即變成一個進程。
**進程是處于運行過程中的程序,并且具有一定的獨立功能,進程是系統進行資源分配和調度的一個獨立單位**。
一般而言,進程包含如下3個特征:??
- 獨立性:進程是系統中獨立存在的實體,它可以擁有自己獨立的資源,每一個進程都擁有自己私有的地址空間。在沒有經過進程本身允許的情況下,一個用戶進程不可以直接就訪問其他進程的地址空間。?
- 動態性:進程與程序的區別在于,程序只是一個靜態的指令集合,而進程是一個正在系統中活動的指令集合。在進程中加入了時間的概念。進程具有自己的生命周期和各種不同的狀態,這些概念在程序中都是不具備的。 ?
- 并發性:多個進程可以在單個處理器上并發執行,多個進程之間不會互相影響。并發性(concurrency)和并行性(parallel)是兩個不同的概念。并行指在同一時刻,有多條指令在多個處理器上同時執行;并發指在同一時刻,只能有一條指令執行,但多個進程指令被快速輪換執行(納秒級),使得在宏觀上具有多個進程同時執行的效果。??
大部分操作系統都支持多進程并發運行,現代的操作系統幾乎都支持同時運行多個任務對于一個CPU而言,它在某個時間點上只能執行一個程序,也就是說,只能運行一個進程,CPU不斷地在這些進程之間輪換執行。為什么感覺不到任何中斷現象?這是因為CPU的執行速度相對人類的感覺而言是在是太快了。當然,如果啟動的程序足夠多,依然可以感覺到程序的運行速度下降。所以雖然CPU在多個進程之間輪換執行,但感覺到(宏觀上)好像多個進程在同時執行。現代的操作系統都支持多進程的并發(輪換執行),但在具體的實現細節上可能因為硬件和操作系統的不同而采用不同的策略。目前操作系統大多采用效率更高的搶占式多任務策略,例如WindowsNT、windows2000以及UNIX/Linux等操作系統。
多線程則擴展了多進程的概念,使得同一個進程可以同時并發(輪換執行)處理多個任務。線程(Thread)也被稱作輕量級進程(LightweightProcess),線程是進程的執行單元。就像進程在操作系統中的地位一樣,線程在進程中是獨立的、并發的執行流。
進程操作系統--線程進程當進出被初始化后,主線程就被創建了對于應用程序而言,通常至少有一個主線程,可以在該進程內創建多條順序執行流,這些順序執行流就是線程,每條線程也是相互獨立的;線程是進程的的組成部分,一個進程可以擁有多個線程,一個線程必須有一個父進程,線程可以擁有自己的堆棧、自己的程序計數器和自己的局部變量,但是不再擁有系統資源,它與父進程的其他線程共享該進程所擁有的全部資源。因為多個線程共享父進程里的全部資源,因此編程更加方便;但必須更加小心,必須確保線程不會妨礙同一進程里的其他線程。??
??? 線程可以完成一定的任務,可與其他線程共享父進程中的共享變量及部分環境,相互之間協同來完成進程所要完成的任務;??
??? 線程是獨立運行的,它并不知道進程中是否還有其他線程存在。線程的執行是搶占式的,也就是說,當前運行的線程在任何時候都可能被掛起,以便另一個線程可以運行;??
??? 一個線程可以創建和撤銷另一個線程,同一個進程中的多個線程之間可以并發執行;??
??? 從邏輯角度看,多線程存在于一個運行中的應用程序中,讓一個運行中的應用程序中可以有多個執行部分同時執行(宏觀上),但操作系統無須將多個線程看作多個獨立的應用,對多線程實現調度和管理以及資源分配。線程的調度和管理由進程本身負責完成。
簡而言之,一個程序運行后至少有一個進程,一個進程里至少要包含一個線程(即主線程),可以包含多個線程。操作系統可以同時執行多個任務,每個任務就是進程;進程可以同時執行多個任務,每個任務就是線程。多線程線程在運行中的程序中是獨立的、并發的執行流,與分隔的進程相比,進程中的線程之間的隔離程序要小,因為它們共享內存、文件句柄和其它每個進程應有的狀態。? 因為線程的劃分尺度小于進程,使得多線程程序的并發性高。
進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。線程比進程具有更高的性能:這是因為同一個進程中的線程都有共性——多個線程將共享同一個進程虛擬空間。線程共享的環境包括:進程代碼段、進程的公有數據等。利用這些共享的數據等,線程很容易實現相互之間的通信。當操作系統創建一個進程時,必須為該進程分配獨立的內存空間,并分配大量的相關資源;但創建一個線程則簡單很多,因此使用多線程來實現并發比使用多進程實現并發的性能要高得多。
使用多線程編程具有如下優點:??
??? 進程之間不能共享內存,但同一進程中的線程之間共享內存非常容易;??
??? 系統創建進程需要為該進程重新分配系統資源,但創建線程則代價小得多,因此使用多線程來實現多任務并發比多進程的效率高;