以下概念摘自《瘋狂java講義》和《深入理解計算機系統(tǒng)》:
程序和進程(Process):
幾乎所有的操作系統(tǒng)都支持同時運行多個任務酸些,一個任務通常就是指一個程序宰译。程序和進程的主要區(qū)別:程序是一個靜態(tài)的指令集合,進程則是正在系統(tǒng)中活動的指令集合魄懂。換句話說沿侈,運行中的程序就是進程。
進程具有三個重要的性質:獨立性市栗、動態(tài)性缀拭、并發(fā)性
獨立性:經(jīng)常在操作系統(tǒng)中獨立存在,擁有獨立的資源和私有的地址空間填帽。沒有經(jīng)過進程自身允許蛛淋,其它用戶進程不能直接訪問進程的地址空間。
動態(tài)性:進程是運行中的程序篡腌,具有自己的生命周期和各種不同狀態(tài)褐荷。
并發(fā)性:多個進程可以在單個處理器上并發(fā)執(zhí)行,互不影響哀蘑。所謂并發(fā)(concurrency)指的是同一時刻只能執(zhí)行一條指令诚卸,但多個進程可以快速的切換執(zhí)行,使得宏觀上具有多個進程同時執(zhí)行的效果绘迁,這種交錯執(zhí)行稱為上下文切換合溺。并行(parallel)則指同一時刻有多條指令在多個處理器上同時執(zhí)行
大部分操作系統(tǒng)都支持并發(fā)運行,一個CPU一個時間點只能運行一個進程缀台,CPU一直不斷的在進程之間輪換執(zhí)行棠赛,由于CPU的計算速度很快,所以會給用戶同時運行多個進程的錯覺,如:聽歌的同時在上網(wǎng)睛约。進程過多后鼎俘,就會明顯感覺到執(zhí)行速度的降低。
線程(Thread)和進程:
線程時進程的執(zhí)行單元辩涝,又叫做輕量級進程(Lightweight Process)贸伐。線程在進程中的地位就像進程在操作系統(tǒng)中的地位一樣。一個進程可以有多個線程怔揩,但一個線程只能有一個父進程捉邢。當進程被初始化后,就會創(chuàng)建一個主線程商膊,通常大多數(shù)程序只要求有一個主線程伏伐,但也可以創(chuàng)建多個,線程之間是相互獨立的晕拆。此外藐翎,線程作為進程的一部分,可以擁有自己的堆棧实幕、程序計數(shù)器(標記下一步開始執(zhí)行的位置)吝镣、局部變量,但不占有系統(tǒng)資源昆庇。進程內(nèi)的多個線程共有進程的系統(tǒng)資源赤惊。線程共享的資源包括:進程代碼段、進程的公有數(shù)據(jù)等凰锡,線程的調(diào)度和管理由進程本身負責未舟。
歸納起來:一個操作系統(tǒng)可以同時執(zhí)行多個任務,每個任務就是進程掂为。進程可以同時執(zhí)行多個任務裕膀,每個任務就是線程。
多線程由于可以共享內(nèi)存勇哗、文件句柄昼扛、其它進程應有的狀態(tài)、線程間隔離程度比進程小等優(yōu)點欲诺,使得相對于多進程而言抄谐,程序的運行效率、資源的占用程度扰法、并發(fā)的性能較好蛹含,因此多線程編程具有很大的優(yōu)勢,在實際編程中應用廣泛塞颁。
喜歡小編的文章可以支持一下哦浦箱!同時吸耿,小編是一個有著10年工作經(jīng)驗的架構師,對于c++酷窥,自己有做資料的整合咽安,一個完整學習C語言c++的路線,學習資料和工具蓬推∽卑簦可以進我的群領取,免費送給大家沸伏。希望你也能憑自己的努力募逞,成為下一個優(yōu)秀的程序員!裙號:648778840