進程與線程
進程就是處于執(zhí)行期的程序(目標碼存放在某種存儲介質(zhì)上)鲫剿。但是進程并不僅僅局限于一段可執(zhí)行代碼段。通常進程還要包含其他資源帘撰,例如:打開的文件,掛起的信號徒坡,內(nèi)核內(nèi)部數(shù)據(jù)撕氧,處理器狀態(tài),一個或多個具有內(nèi)存映射的的內(nèi)存地址空間及一個或者多個執(zhí)行線程(thread of execution)等喇完。實際上呵曹,進程就是正在執(zhí)行的程序代碼的實時結(jié)果。
線程(thread)何暮,或者成為執(zhí)行線程奄喂,是在進程中活動的對象。每個線程都擁有一個獨立的程序計數(shù)器海洼、進程棧和一組進程寄存器跨新。內(nèi)核調(diào)度的對象是線程而不是進程。在傳統(tǒng)的Unix/Linux系統(tǒng)中坏逢,一個進程只包含一個線程域帐,但現(xiàn)代操作系統(tǒng)中,包含多個線程的多線程程序司空見慣是整。<Linux系統(tǒng)的線程實現(xiàn)非常特別:它對線程和進程并不是特別區(qū)分肖揣。對Linux而言,線程只不過是一種特殊的進程罷了>
進程——資源分配的最小單位
線程——程序執(zhí)行的最小單位
進程有獨立的堆棧和局部變量浮入,但線程沒有單獨的地址空間龙优,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯事秀,但是進程切換時彤断,耗費資源較大,效率要差一些(據(jù)統(tǒng)計是線程的30倍左右)易迹。但是對于一些要求同時進行并且又要共享某些變量的并發(fā)操作宰衙,只能用線程,不能用進程睹欲。
為什么使用多線程而不是多進程
線程間方便的通信機制供炼。對于不同進程來說,它們具有獨立的數(shù)據(jù)空間窘疮,要進行數(shù)據(jù)的傳遞只能通過進程間通信的方式進行袋哼,這種方式不僅費時,而且很不方便考余。線程則不然先嬉,由于同一進程下的線程之間共享數(shù)據(jù)空間轧苫,所以一個線程的數(shù)據(jù)可以直接為其他線程所用楚堤。
并發(fā)和并行
并發(fā)又稱共行疫蔓,是指能處理多個同時性活動的能力,并發(fā)事件之間不一定要同一時刻發(fā)生身冬。 比如衅胀,現(xiàn)代計算機系統(tǒng)可在同一段時間內(nèi)以進程的形式將多個程序加載到存儲器中,并借由處理器的時分復用酥筝, 以在一個處理器上表現(xiàn)出同時運行的感覺滚躯。
并行是指同時發(fā)生的兩個并發(fā)事件,具有并發(fā)的含義嘿歌,而并發(fā)則不一定并行掸掏。
并發(fā)和并行的區(qū)別就是一個處理器同時處理多個任務和多個處理器或者是多核的處理器同時處理多個不同的任務。 前者是邏輯上的同時發(fā)生(simultaneous)宙帝,而后者是物理上的同時發(fā)生丧凤。
以上這些都是一些比較淺顯的概念,深入的概念可以去查閱相關(guān)的linux/Unix相關(guān)資料步脓。
時:2018年4月18日