進(jìn)程
程序的一次執(zhí)行孙乖,占有獨(dú)立的內(nèi)存空間
線程
線程是進(jìn)程內(nèi)的一個(gè)獨(dú)立執(zhí)行單元
是程序執(zhí)行的一個(gè)完整流程
是CPU的最小的調(diào)度單元
相關(guān)知識(shí)
應(yīng)用程序必須運(yùn)行在某個(gè)進(jìn)程的某個(gè)線程上
一個(gè)進(jìn)程中至少有一個(gè)運(yùn)行的線程:主線程咪辱,進(jìn)程啟動(dòng)后自動(dòng)創(chuàng)建
一個(gè)進(jìn)程中可以同時(shí)運(yùn)行多個(gè)線程唱矛,程序是多線程運(yùn)行的
一個(gè)進(jìn)程中的數(shù)據(jù)可以供其中的多個(gè)線程直接共享
多個(gè)進(jìn)程之間的數(shù)據(jù)是不能直接共享的
線程池:保存多個(gè)線程對(duì)象的容器锦担,實(shí)現(xiàn)線程對(duì)象的反復(fù)利用
相關(guān)問(wèn)題
多進(jìn)程
一個(gè)應(yīng)用程序可以同時(shí)啟動(dòng)多個(gè)實(shí)例運(yùn)行
多線程
在一個(gè)進(jìn)程內(nèi)漂彤,同時(shí)有多個(gè)線程運(yùn)行
優(yōu)點(diǎn):
??能有效提升CPU的利用率
缺點(diǎn):
??創(chuàng)建多線程開(kāi)銷(xiāo)
??線程間切換開(kāi)銷(xiāo)
??死鎖與狀態(tài)同步問(wèn)題
單線程
優(yōu)點(diǎn):
??順序編程簡(jiǎn)單易懂
缺點(diǎn):
??效率低
JS是單線程運(yùn)行的
JS是單線程運(yùn)行的
但使用H5中的Web Workers可以多線程運(yùn)行
瀏覽器運(yùn)行
單進(jìn)程:FireFox伦腐,老版IE
多進(jìn)程:Chrome,新版IE
瀏覽器是多線程運(yùn)行的
- 主線程:
- js 引擎模塊:負(fù)責(zé) js 程序的編譯和運(yùn)行
- html/css 文檔解析模塊:負(fù)責(zé)頁(yè)面文本的解析
- DOM/CSS 模塊:負(fù)責(zé) DOM/CSS 在內(nèi)存中的相關(guān)處理
- 布局和渲染模塊:負(fù)責(zé)頁(yè)面的布局和效果的繪制(內(nèi)存中的對(duì)象)
- 分線程:
- 定時(shí)器模塊:負(fù)責(zé)定時(shí)器的管理
- DOM 事件響應(yīng)模塊:負(fù)責(zé)事件的管理
- 網(wǎng)絡(luò)請(qǐng)求模塊:負(fù)責(zé) ajax 請(qǐng)求
Web Workers
Web Workers 是 HTML5 提供的一個(gè) javascript 多線程的解決方案
將大量計(jì)算的代碼交給 Web Worker 運(yùn)行而不凍結(jié)用戶界面
子線程完全受主線程控制,且不得操作 DOM