死磕java之多線程(一)進(jìn)程與線程

進(jìn)程與線程

進(jìn)程

· 程序由指令和數(shù)據(jù)組成,數(shù)據(jù)要讀寫,就必須要將指令加載至CPU,數(shù)據(jù)加載至內(nèi)存,在指令運(yùn)行過程中還需要用到磁盤、網(wǎng)絡(luò)等設(shè)備,進(jìn)程就是用來加載指令、管理內(nèi)存、管理IO的
· 當(dāng)一個(gè)程序被運(yùn)行,從磁盤加載這個(gè)程序的代碼到內(nèi)存,這時(shí)就開啟了一個(gè)進(jìn)程
· 進(jìn)程就可以視作程序的一個(gè)實(shí)現(xiàn),根據(jù)程序的實(shí)現(xiàn)不同,大部分程序可以同時(shí)運(yùn)行多個(gè)實(shí)例進(jìn)程,有些程序只能啟動(dòng)一個(gè)實(shí)例進(jìn)程

線程

· 一個(gè)進(jìn)程之內(nèi)可分為一個(gè)或多個(gè)線程
· 一個(gè)線程就是一個(gè)指令流,將指令流中的一條條指令以一定的順序交給CPU執(zhí)行
· java中,線程作為最小調(diào)度單位,進(jìn)程作為資源分配的最小單位,在windows中進(jìn)程是不活動(dòng)的,只是作為線程的容器

二者對(duì)比

· 進(jìn)程基本上相互獨(dú)立,線程存在于進(jìn)程內(nèi),是進(jìn)程的一個(gè)子集
· 進(jìn)程擁有共享的資源,如內(nèi)存空間等,供其內(nèi)部的線程共享
· 進(jìn)程間通信較為復(fù)雜
· 同一臺(tái)計(jì)算機(jī)的進(jìn)程通信成為IPC(Inter-process communication)
· 不同計(jì)算機(jī)之間的進(jìn)程通信,需要通過網(wǎng)絡(luò),并遵守共同的協(xié)議,例如HTTP
· 線程通信可以通過共享進(jìn)程內(nèi)的內(nèi)存,例如多線程可以訪問同一個(gè)共享變量
· 線程更輕量,線程的上下文切換成本要比進(jìn)程的上下文切換低

并發(fā)與并行

· 單核CPU,在多個(gè)線程運(yùn)行時(shí),通過任務(wù)調(diào)度器會(huì)不斷的在不同線程之間來回切換,給人一種多個(gè)線程同時(shí)執(zhí)行的錯(cuò)覺,這種稱之為并發(fā)

· 對(duì)多核心CPU,每個(gè)核心都可以調(diào)度執(zhí)行不同的線程任務(wù),稱之為并行,這種時(shí)候常常出現(xiàn)并發(fā)與并行同時(shí)存在的情況,比如同一個(gè)核心在多個(gè)線程之間來回切換執(zhí)行(并發(fā)),不同核心同時(shí)處理不同線程任務(wù)(并行 )

同步與異步

· 同步--等待結(jié)果返回
· 異步--不需要等待結(jié)果返回

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容