單線程和多線程的簡單理解

線程:簡單的說就是處理事務的任務鏈,當只有一條鏈,所有的事情都在這一條鏈上執行時,那就是單線程,單線程有很多缺點,就是當執行某個耗時或者不能立即完成的任務時,比如:網絡通訊、復雜運動,該線程就會暫時停止對其他任務的響應和處理,造成的視覺效果就是程序的“假死”,也就是應用程序被卡在那里無法繼續執行,因此在多數情況下,單線程的應用很少。而當有多條鏈時,那就是多線程了,當然并不是說多條線并行,而是說有一條主線程,處理整個程序任務的主方向的鏈,而其鏈上又有許許多多的分支,就像樹枝那樣,這樣,既有了主線程去處理那些主要任務,又有了那些細小線程去處理耗時費力任務,從而讓界面看起來更加流暢。iOS平臺對多線程的支持iOS平臺提供了非常優秀的多線程支持,程序可以通過非常簡單的方式來啟動多線程,iOS平臺不僅提供了NSThread類來創建多線程,還提供了GCD方式來簡化多線程編程,提供了NSOperation和NSOperationQueue支持多線程編程。

線程和進程幾乎所有的操作系統都支持同時運行多個任務,一個任務通常就是一個程序,每個運行中的程序就是一個進程。? 當一個程序運行時,內部可能包含了多個順序執行流,每個順序執行流就是一個線程。

幾乎所有的操作系統都支持進程的概念,所有運行中的任務通常對應一個進程(Process)。當一個程序進入內存,運行后,即變成一個進程。

**進程是處于運行過程中的程序,并且具有一定的獨立功能,進程是系統進行資源分配和調度的一個獨立單位**。

一般而言,進程包含如下3個特征:??

- 獨立性:進程是系統中獨立存在的實體,它可以擁有自己獨立的資源,每一個進程都擁有自己私有的地址空間。在沒有經過進程本身允許的情況下,一個用戶進程不可以直接就訪問其他進程的地址空間。?

- 動態性:進程與程序的區別在于,程序只是一個靜態的指令集合,而進程是一個正在系統中活動的指令集合。在進程中加入了時間的概念。進程具有自己的生命周期和各種不同的狀態,這些概念在程序中都是不具備的。 ?

- 并發性:多個進程可以在單個處理器上并發執行,多個進程之間不會互相影響。并發性(concurrency)和并行性(parallel)是兩個不同的概念。并行指在同一時刻,有多條指令在多個處理器上同時執行;并發指在同一時刻,只能有一條指令執行,但多個進程指令被快速輪換執行(納秒級),使得在宏觀上具有多個進程同時執行的效果。??

大部分操作系統都支持多進程并發運行,現代的操作系統幾乎都支持同時運行多個任務對于一個CPU而言,它在某個時間點上只能執行一個程序,也就是說,只能運行一個進程,CPU不斷地在這些進程之間輪換執行。為什么感覺不到任何中斷現象?這是因為CPU的執行速度相對人類的感覺而言是在是太快了。當然,如果啟動的程序足夠多,依然可以感覺到程序的運行速度下降。所以雖然CPU在多個進程之間輪換執行,但感覺到(宏觀上)好像多個進程在同時執行。現代的操作系統都支持多進程的并發(輪換執行),但在具體的實現細節上可能因為硬件和操作系統的不同而采用不同的策略。目前操作系統大多采用效率更高的搶占式多任務策略,例如WindowsNT、windows2000以及UNIX/Linux等操作系統。

多線程則擴展了多進程的概念,使得同一個進程可以同時并發(輪換執行)處理多個任務。線程(Thread)也被稱作輕量級進程(LightweightProcess),線程是進程的執行單元。就像進程在操作系統中的地位一樣,線程在進程中是獨立的、并發的執行流。

進程操作系統--線程進程當進出被初始化后,主線程就被創建了對于應用程序而言,通常至少有一個主線程,可以在該進程內創建多條順序執行流,這些順序執行流就是線程,每條線程也是相互獨立的;線程是進程的的組成部分,一個進程可以擁有多個線程,一個線程必須有一個父進程,線程可以擁有自己的堆棧、自己的程序計數器和自己的局部變量,但是不再擁有系統資源,它與父進程的其他線程共享該進程所擁有的全部資源。因為多個線程共享父進程里的全部資源,因此編程更加方便;但必須更加小心,必須確保線程不會妨礙同一進程里的其他線程。??

??? 線程可以完成一定的任務,可與其他線程共享父進程中的共享變量及部分環境,相互之間協同來完成進程所要完成的任務;??

??? 線程是獨立運行的,它并不知道進程中是否還有其他線程存在。線程的執行是搶占式的,也就是說,當前運行的線程在任何時候都可能被掛起,以便另一個線程可以運行;??

??? 一個線程可以創建和撤銷另一個線程,同一個進程中的多個線程之間可以并發執行;??

??? 從邏輯角度看,多線程存在于一個運行中的應用程序中,讓一個運行中的應用程序中可以有多個執行部分同時執行(宏觀上),但操作系統無須將多個線程看作多個獨立的應用,對多線程實現調度和管理以及資源分配。線程的調度和管理由進程本身負責完成。

簡而言之,一個程序運行后至少有一個進程,一個進程里至少要包含一個線程(即主線程),可以包含多個線程。操作系統可以同時執行多個任務,每個任務就是進程;進程可以同時執行多個任務,每個任務就是線程。多線程線程在運行中的程序中是獨立的、并發的執行流,與分隔的進程相比,進程中的線程之間的隔離程序要小,因為它們共享內存、文件句柄和其它每個進程應有的狀態。? 因為線程的劃分尺度小于進程,使得多線程程序的并發性高。

進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。線程比進程具有更高的性能:這是因為同一個進程中的線程都有共性——多個線程將共享同一個進程虛擬空間。線程共享的環境包括:進程代碼段、進程的公有數據等。利用這些共享的數據等,線程很容易實現相互之間的通信。當操作系統創建一個進程時,必須為該進程分配獨立的內存空間,并分配大量的相關資源;但創建一個線程則簡單很多,因此使用多線程來實現并發比使用多進程實現并發的性能要高得多。

使用多線程編程具有如下優點:??

??? 進程之間不能共享內存,但同一進程中的線程之間共享內存非常容易;??

??? 系統創建進程需要為該進程重新分配系統資源,但創建線程則代價小得多,因此使用多線程來實現多任務并發比多進程的效率高;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容