進(jìn)程和線程都是計(jì)算機(jī)中的概念,用于描述程序執(zhí)行時(shí)的運(yùn)行單位。
進(jìn)程是指正在運(yùn)行的程序的實(shí)例,包括程序代碼、數(shù)據(jù)、堆棧和資源等。 每個(gè)進(jìn)程都擁有獨(dú)立的地址空間,因此不同進(jìn)程之間的數(shù)據(jù)無法直接訪問,只能通過進(jìn)程間通信的方式進(jìn)行交互。
(資料圖)
線程是進(jìn)程中的一個(gè)執(zhí)行單元,一個(gè)進(jìn)程可以包含多個(gè)線程,每個(gè)線程共享進(jìn)程的地址空間和資源,但是擁有自己的堆棧和執(zhí)行狀態(tài)。 不同線程之間可以直接訪問同一進(jìn)程的數(shù)據(jù),因此線程間通信更加方便,但也需要注意線程同步和互斥問題。
在 JavaScript 中,進(jìn)程和線程的概念并不是直接暴露給開發(fā)者的,而是通過瀏覽器或 Node.js 等執(zhí)行環(huán)境來實(shí)現(xiàn)的。
在瀏覽器中,JavaScript 是單線程的,也就是說所有 JavaScript 代碼都運(yùn)行在同一個(gè)線程中,這個(gè)線程被稱為“UI 線程”或“主線程”。 這個(gè)線程負(fù)責(zé)處理用戶交互事件、更新 UI 界面、執(zhí)行 js 代碼等任務(wù)。如果 js 代碼執(zhí)行時(shí)間過長(zhǎng),會(huì)導(dǎo)致頁(yè)面出現(xiàn)“假死”或“卡頓”現(xiàn)象,因此需要采用異步編程的方式來避免這種情況。
在 JavaScript 中,常用的異步編程方式有回調(diào)函數(shù)、 Promise 和 async/await 等。這些方式都可以讓 js 代碼異步執(zhí)行,從而避免長(zhǎng)時(shí)間阻塞 UI 線程。
在 Node.js 中,JavaScript 采用的是基于事件驅(qū)動(dòng)和非阻塞 I/O 的模型,也就是說,它是基于單線程的,但是可以通過異步 I/O 和事件驅(qū)動(dòng)來實(shí)現(xiàn)高并發(fā)。在 Node.js 中,可以通過 child_process 或 cluster 模塊來創(chuàng)建子進(jìn)程,實(shí)現(xiàn)多進(jìn)程的方式來提高程序的并發(fā)性能。
下面是在 JavaScript 中使用異步編程方式避免阻塞 UI 線程的例子:
// 使用回調(diào)函數(shù)的方式異步加載圖片function loadImageAsync(url, callback) { var img = new Image(); img.onload = function() { callback(null, img); }; img.onerror = function() { callback(new Error("Could not load image at " + url)); }; img.src = url;}// 調(diào)用異步函數(shù)加載圖片并更新 UIloadImageAsync("https://image.com/image.png", function(err, img) { if (err) { console.error(err); } else { document.body.appendChild(img); }});
上面的代碼通過回調(diào)函數(shù)的方式實(shí)現(xiàn)了異步加載圖片,避免了長(zhǎng)時(shí)間阻塞 UI 線程。
下面是在 Node.js 中用 child_process 模塊創(chuàng)建子進(jìn)程的例子:
const { spawn } = require("child_process");// 創(chuàng)建子進(jìn)程并執(zhí)行命令const child = spawn("ls", ["-lh", "/usr"]);// 監(jiān)聽子進(jìn)程的輸出child.stdout.on("data", (data) => { console.log( child stdout:\n${data} );});child.stderr.on("data", (data) => { console.error( child stderr:\n${data} );});// 監(jiān)聽子進(jìn)程的關(guān)閉事件child.on("close", (code) => { console.log( child process exited with code ${code} );});
在上面的示例中,我們創(chuàng)建了一個(gè)子進(jìn)程,并在其中執(zhí)行 ls -lh /usr 命令。我們還監(jiān)聽子進(jìn)程的輸出和關(guān)閉事件。在執(zhí)行期間,子進(jìn)程的輸出將被打印到控制臺(tái),并在子進(jìn)程退出時(shí)輸出子進(jìn)程的退出代碼。
注意,這里我們使用的是 Node.js 的 spawn 方法,它是異步的。還有一個(gè) exec 方法可以執(zhí)行同步的系統(tǒng)命令,但是在執(zhí)行長(zhǎng)時(shí)間運(yùn)行的任務(wù)時(shí)可能會(huì)阻塞主進(jìn)程的執(zhí)行。
總的來說,JavaScript 中的進(jìn)程和線程概念都是通過執(zhí)行環(huán)境來實(shí)現(xiàn)的,而不是直接暴露給開發(fā)者的。開發(fā)者需要根據(jù)實(shí)際需求來選擇合適的編程模型,以達(dá)到最優(yōu)的性能和并發(fā)效果。同時(shí),我們還需要注意異步編程的相關(guān)技術(shù)和并發(fā)控制的問題,以確保程序的正確性和性能。
標(biāo)簽:
- JS中的進(jìn)程和線程_熱點(diǎn)在線
- 天天亮點(diǎn)!長(zhǎng)峰醫(yī)院火災(zāi):一病房?jī)?nèi)三名老人靠濕毛巾捂住口鼻,堅(jiān)持到消防員救出
- 苦苦支撐!詹姆斯半場(chǎng)9中5砍下12+6 今日最新
- 陳夢(mèng)再勝石川被邀合影,對(duì)決日本女乒二號(hào)人物挑戰(zhàn)更大_今日關(guān)注
- 國(guó)王:薩博尼斯將會(huì)出戰(zhàn)明日戰(zhàn)勇士G3
- 世界快看:科學(xué)家發(fā)現(xiàn)三疊紀(jì)“長(zhǎng)頸”龍家族新成員
- 糾纏量子光源在芯片上集成
- 中國(guó)科學(xué)家精確測(cè)量!銀河系“體重”算出來了 每日熱點(diǎn)
- 快報(bào):可以開啟“吃瓜模式”啦
- 陳飛宇說:運(yùn)氣是演員無法人為掌控的,要把本職工作做好|熱推薦
- 天天報(bào)道:杭州一男子嫌未盛滿米飯暴打食堂阿姨
- 嘉興人,高速通行重磅消息!
- 當(dāng)前要聞:共享電動(dòng)車亂停放…番禺持續(xù)整治!大北路、平康路等有所改善
- 世界今頭條!舊改快訊┃深圳最后一個(gè)棚改!羅湖草埔片區(qū)項(xiàng)目啟動(dòng)
- 深圳二手房“指導(dǎo)價(jià)貸款”取消,有銀行已執(zhí)行?|熱頭條
- 觀速訊丨家庭防火指南來了!這些細(xì)節(jié)最易被忽視,一圖讀懂
- 要聞速遞:中國(guó)東方演藝集團(tuán)成立音樂劇團(tuán) 將推出《星辰》等作品
- 明天上午,北京牛街臨時(shí)交通管制!|環(huán)球觀焦點(diǎn)
- 德國(guó)防長(zhǎng):討論烏克蘭加入北約為時(shí)尚早
- 【獨(dú)家】海關(guān)查獲1.8噸舊和服,退運(yùn)!
- 【環(huán)球快播報(bào)】iban號(hào)碼是什么意思_iban號(hào)碼是什么
- 唐繼堯銀元價(jià)格(2023年04月21日)
- 2399元起!天馬供貨小米平板6 Pro_世界熱點(diǎn)評(píng)
- 世界熱資訊!長(zhǎng)川科技股東戶數(shù)增加53.80%,戶均持股56.4萬元
- 【天天速看料】全國(guó)首張境外游艇駕照直換證在三亞簽發(fā)
- 環(huán)球播報(bào):陜西西咸新區(qū)計(jì)劃供應(yīng)25宗宅地出讓 8宗為安置性商品房用地
- 達(dá)誠(chéng)基金管理有限公司旗下基金2023年第1季度報(bào)告提示性公告-微資訊
- 6000噸榴蓮到達(dá)!榴蓮批發(fā)價(jià)1斤低至20元
- 網(wǎng)友自費(fèi)買冰淇淋去車展現(xiàn)場(chǎng)發(fā) 高喊“中國(guó)人免費(fèi)領(lǐng)” 全球速讀
- 世界即時(shí):姐姐未婚先孕用妹妹身份證結(jié)婚 27年后妹妹申請(qǐng)搖號(hào)才發(fā)現(xiàn)
- 1 陳夢(mèng)再勝石川被邀合影,對(duì)決日本女乒二號(hào)人物挑戰(zhàn)更大_今日關(guān)注
- 2 世界快看:科學(xué)家發(fā)現(xiàn)三疊紀(jì)“長(zhǎng)頸”龍家族新成員
- 3 糾纏量子光源在芯片上集成
- 4 中國(guó)科學(xué)家精確測(cè)量!銀河系“體重”算出來了 每日熱點(diǎn)
- 5 快報(bào):可以開啟“吃瓜模式”啦
- 6 世界今頭條!舊改快訊┃深圳最后一個(gè)棚改!羅湖草埔片區(qū)項(xiàng)目啟動(dòng)
- 7 觀速訊丨家庭防火指南來了!這些細(xì)節(jié)最易被忽視,一圖讀懂
- 8 要聞速遞:中國(guó)東方演藝集團(tuán)成立音樂劇團(tuán) 將推出《星辰》等作品
- 9 明天上午,北京牛街臨時(shí)交通管制!|環(huán)球觀焦點(diǎn)
- 10 德國(guó)防長(zhǎng):討論烏克蘭加入北約為時(shí)尚早