進(jìn)程跟線程的理解
進(jìn)程(英語:process)台舱,是計(jì)算機(jī)中已運(yùn)行程序的實(shí)例,是系統(tǒng)進(jìn)行資源分配和調(diào)度(若不支持線程機(jī)制,進(jìn)程的系統(tǒng)調(diào)度的單位金蜀。否則,線程是系統(tǒng)調(diào)度的單位)的獨(dú)立單位的畴。
為了更好的介紹進(jìn)程這個(gè)概念渊抄,先從多道程序設(shè)計(jì)說起,多道程序設(shè)計(jì)技術(shù)是操作系統(tǒng)最早引入的技術(shù)苗傅,它的設(shè)計(jì)思想是允多個(gè)程序同時(shí)進(jìn)入內(nèi)存并運(yùn)行抒线,其目的是為了CPU的利用率,進(jìn)而提高系統(tǒng)效率渣慕。多道程序設(shè)計(jì)技術(shù)允許多個(gè)程序同時(shí)進(jìn)入內(nèi)存并運(yùn)行嘶炭,在這樣的并發(fā)環(huán)境下抱慌,如何描述、刻畫這樣執(zhí)行的程序呢眨猎?因此引入了“進(jìn)程”抑进。
程序本身只是指令、數(shù)據(jù)及其組織形式的描述睡陪,進(jìn)程才是程序(那些指令和數(shù)據(jù))的真正運(yùn)行實(shí)例寺渗。若干進(jìn)程有可能與同一個(gè)程序相關(guān)系,且每個(gè)進(jìn)程皆可以同步(循序)或異步(平行)的方式獨(dú)立運(yùn)行兰迫。
進(jìn)程特點(diǎn):
進(jìn)程是是正在運(yùn)行程序的抽象信殊。
有狀態(tài)(新生、運(yùn)行汁果、等待涡拘、就緒、結(jié)束)据德,切換耗時(shí)鳄乏。
系統(tǒng)資源(如內(nèi)存、文件)以進(jìn)程為單位分配棘利。
操作系統(tǒng)為每個(gè)進(jìn)程分配了獨(dú)立的地址空間
操作系統(tǒng)通過“調(diào)度”把控制權(quán)交給進(jìn)程橱野。
線程
線程(英語:thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位,線程是進(jìn)程中的一個(gè)執(zhí)行路徑善玫。
線程特點(diǎn):
有標(biāo)識(shí)符ID
有狀態(tài)(產(chǎn)生水援、中斷、非中斷蝌焚、結(jié)束)及狀態(tài)轉(zhuǎn)換裹唆,所以需要提供一些狀態(tài)轉(zhuǎn)換操作
不運(yùn)行時(shí)需要保存上下文環(huán)境,所以需要程序計(jì)數(shù)器等寄存器
有自己的棧和棧指針
共享所在進(jìn)程的地址空間和其它資源
進(jìn)程與線程區(qū)別
定義方面:進(jìn)程是程序在某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng)只洒;線程是進(jìn)程中的一個(gè)執(zhí)行路徑许帐。(進(jìn)程可以創(chuàng)建多個(gè)線程)
角色方面:在支持線程機(jī)制的系統(tǒng)中,進(jìn)程是系統(tǒng)資源分配的單位毕谴,線程是CPU調(diào)度的單位成畦。
資源共享方面:進(jìn)程之間不能共享資源,而線程共享所在進(jìn)程的地址空間和其它資源涝开。同時(shí)線程還有自己的棧和棧指針循帐,程序計(jì)數(shù)器等寄存器。
獨(dú)立性方面:進(jìn)程有自己獨(dú)立的地址空間舀武,而線程沒有拄养,線程必須依賴于進(jìn)程而存在。
開銷方面银舱。進(jìn)程切換的開銷較大瘪匿。線程相對(duì)較小跛梗。
重點(diǎn)
面試其實(shí)如果沒把握,只需要回答:進(jìn)程是系統(tǒng)資源分配的單位棋弥,線程是CPU調(diào)度的單位核偿,進(jìn)程可以創(chuàng)建多個(gè)線程