更新時間:2023-04-27 來源:黑馬程序員 瀏覽量:
進程——資源分配的最小單位,線程——程序執(zhí)行的最小單位。
線程進程的區(qū)別體現(xiàn)在幾個方面:
第一:因為進程擁有獨立的堆棧空間和數(shù)據(jù)段,所以每當啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數(shù)據(jù)表來維護它的代碼段、堆棧段和數(shù)據(jù)段,這對于多進程來說十分“奢侈”,系統(tǒng)開銷比較大,而線程不一樣,線程擁有獨立的堆??臻g,但是共享數(shù)據(jù)段,它們彼此之間使用相同的地址空間,共享大部分數(shù)據(jù),比進程更節(jié)儉,開銷比較小,切換速度也比進程快,效率高,但是正由于進程之間獨立的特點,使得進程安全性比較高,也因為進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產(chǎn)生影響,而線程只是一個進程中的不同執(zhí)行路徑。一個線程死掉就等于整個進程死掉。
第二:體現(xiàn)在通信機制上面,正因為進程之間互不干擾,相互獨立,進程的通信機制相對很復(fù)雜,譬如管道,信號,消息隊列,共享內(nèi)存,套接字等通信機制,而線程由于共享數(shù)據(jù)段所以通信機制很方便。
3.屬于同一個進程的所有線程共享該進程的所有資源,包括文件描述符。而不同過的進程相互獨立。
4.線程又稱為輕量級進程,進程有進程控制塊,線程有線程控制塊;
5.線程必定也只能屬于一個進程,而進程可以擁有多個線程而且至少擁有一個線程;
第四:體現(xiàn)在程序結(jié)構(gòu)上,舉一個簡明易懂的列子:當我們使用進程的時候,我們不自主的使用 if else嵌套來判斷
pid,使得程序結(jié)構(gòu)繁瑣,但是當我們使用線程的時候,基本上可以甩掉它,當然程序內(nèi)部執(zhí)行功能單元需要使用的時候還是要使用,所以線程對程序結(jié)構(gòu)的改善有很大幫助。
【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19【AI大模型開發(fā)-Python】畢業(yè)33個工作日,就業(yè)率已達到94.55%,班均薪資20763元
2025-09-19【AI智能應(yīng)用開發(fā)-Java】畢業(yè)當天offer率91%,薪資1W+占比54.2%,班級均薪12k+
2025-09-19