線程是輕量級(jí)的進(jìn)程(LWP:light weight process),在 Linux 環(huán)境下線程的本質(zhì)仍是進(jìn)程。在計(jì)算機(jī)上運(yùn)行的程序是一組指令及指令參數(shù)的組合,指令按照既定的邏輯控制計(jì)算機(jī)運(yùn)行。操作系統(tǒng)會(huì)以進(jìn)程為單位,分配系統(tǒng)資源,可以這樣理解,進(jìn)程是資源分配的最小單位,線程是操作系統(tǒng)調(diào)度執(zhí)行的最小單位。先從概念上了解一下線程和進(jìn)程之間的區(qū)別:
每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)虛擬地址空間,一個(gè)進(jìn)程只能搶一個(gè) CPU 時(shí)間片
一個(gè)地址空間中可以劃分出多個(gè)線程,在有效的資源基礎(chǔ)上,能夠搶更多的 CPU 時(shí)間片
CPU 的調(diào)度和切換:線程的上下文切換比進(jìn)程要快的多
上下文切換:進(jìn)程 / 線程分時(shí)復(fù)用 CPU 時(shí)間片,在切換之前會(huì)將上一個(gè)任務(wù)的狀態(tài)進(jìn)行保存,下次切換回這個(gè)任務(wù)的時(shí)候,加載這個(gè)狀態(tài)繼續(xù)運(yùn)行,任務(wù)從保存到再次加載這個(gè)過程就是一次上下文切換。