国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JS執(zhí)行機(jī)制--同步與異步

這篇具有很好參考價(jià)值的文章主要介紹了JS執(zhí)行機(jī)制--同步與異步。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

單線程
JavaScript語言具有單線程的特點(diǎn),同一個(gè)時(shí)間只能做一件事情。這是因?yàn)镴avaScript腳本語言是為了處理頁面中用戶的交互,以及操作DOM而誕生的。如果對(duì)某個(gè)DOM元素進(jìn)行添加和刪除,不同同時(shí)進(jìn)行。應(yīng)該是先添加,再刪除,事件有序。

單線程的特點(diǎn)是所有任務(wù)都需要排隊(duì)進(jìn)行,前一個(gè)任務(wù)結(jié)束,才會(huì)執(zhí)行后一個(gè)任務(wù)。這樣會(huì)導(dǎo)致問題:如果JS執(zhí)行時(shí)間過長(zhǎng),這樣會(huì)導(dǎo)致頁面渲染不連貫,導(dǎo)致頁面渲染加載阻塞。

同步與異步
為了解決這個(gè)問題,利用多核 CPU 的計(jì)算能力,HTML5 提出 Web Worker 標(biāo)準(zhǔn),允許 JavaScript腳本創(chuàng)建多個(gè)線程,JS中出現(xiàn)了同步和異步。
同步
前一個(gè)任務(wù)結(jié)束后再執(zhí)行后一個(gè)任務(wù)
如:

console.log(1);
console.log(2);
console.log(3);
// 1 2 3

異步
在做這件事的同時(shí),你還可以去處理其他事情
如:

console.log(1);
setTimeout(function() {
    console.log(3);
},1000);
console.log(2);
// 1 2 3

如果按同步執(zhí)行,要先通過定時(shí)器執(zhí)行完才執(zhí)行下一步,瀏覽器效率大大降低。
所以異步可以先打印 2 等定時(shí)器時(shí)間到再打印3

事件循環(huán)

如果這樣,結(jié)果打印的是什么呢?

console.log(1);
setTimeout(function() {
    console.log(3);
},0);
console.log(2);
  • JavaScript的同步任務(wù)在主線程中執(zhí)行,形成一個(gè)執(zhí)行棧
  • 異步任務(wù)通過回調(diào)函數(shù)實(shí)現(xiàn),把任務(wù)添加到任務(wù)隊(duì)列中

執(zhí)行步驟:

  1. 先執(zhí)行執(zhí)行棧中的同步任務(wù)
  2. 異步任務(wù)(回調(diào)函數(shù))放入任務(wù)隊(duì)列中
  3. 一旦執(zhí)行棧中的所有同步任務(wù)執(zhí)行完畢,系統(tǒng)就會(huì)按次序讀取任務(wù)隊(duì)列中的異步任務(wù),于是被讀取的異步任務(wù)結(jié)束等待狀態(tài),進(jìn)入執(zhí)行棧,開始執(zhí)行

JS執(zhí)行機(jī)制--同步與異步

所以上面打印的結(jié)果還是1 2 3
類似的

console.log(1);
document.onclick = function() {
    console.log('click');
}
console.log(2);
setTimeout(function() {
    console.log(3)
}, 3000)
// 打印1 2 如果點(diǎn)擊了,打印click,無論是否點(diǎn)擊3秒后都打印3

同步任務(wù)放在執(zhí)行棧中執(zhí)行,異步任務(wù)由異步進(jìn)程處理放到任務(wù)隊(duì)列中,執(zhí)行棧中的任務(wù)執(zhí)行完畢會(huì)去任務(wù)隊(duì)列中查看是否有異步任務(wù)執(zhí)行,由于主線程不斷的重復(fù)獲得任務(wù)、執(zhí)行任務(wù)、再獲取任務(wù)、再執(zhí)行,所以這種機(jī)制被稱為事件循環(huán)( event loop)。

JS執(zhí)行機(jī)制--同步與異步

執(zhí)行步驟

JS執(zhí)行機(jī)制--同步與異步

?文章來源地址http://www.zghlxwxcb.cn/news/detail-419124.html

到了這里,關(guān)于JS執(zhí)行機(jī)制--同步與異步的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JAVA的回調(diào)機(jī)制、同步/異步調(diào)用

    JAVA的回調(diào)機(jī)制、同步/異步調(diào)用

    同步調(diào)用是最基本的調(diào)用方式。類A的a()方法調(diào)用類B的b()方法, 類A的方法需要等到B類的方法執(zhí)行完成才會(huì)繼續(xù)執(zhí)行 。如果B的方法長(zhǎng)時(shí)間阻塞,就會(huì)導(dǎo)致A類方法無法正常執(zhí)行下去。 如果A調(diào)用B,B的執(zhí)行時(shí)間比較長(zhǎng),那么就需要考慮進(jìn)行異步處理,使得B的執(zhí)行不影響A。通常

    2024年02月14日
    瀏覽(22)
  • 【已解決】C語言實(shí)現(xiàn)多線程的同步與異步

    【已解決】C語言實(shí)現(xiàn)多線程的同步與異步

    說真的寫了這篇博文時(shí),才知道c語言本身不支持多線程,而是一些windowsapi讓c語言擁有多線程的能力,那下面內(nèi)容就以打開對(duì)話框?yàn)槔?,展現(xiàn)如何實(shí)現(xiàn)多線程的同步與異步。 想要實(shí)現(xiàn)c語言打開多個(gè)對(duì)話框的多線程同步與異步 代碼效果 對(duì)代碼的查閱會(huì)發(fā)現(xiàn),關(guān)鍵在于定義多線

    2024年02月02日
    瀏覽(20)
  • js 同步與異步

    js 同步與異步

    一、js 執(zhí)行機(jī)制 JavaScript語言的一大特點(diǎn)就是 單線程 ,即(同一時(shí)間只能做一件事情)。因?yàn)镴avaScript是為了處理頁面中用戶的交互,以及操作DOM而誕生的。比如對(duì)某個(gè)DOM元素進(jìn)行添加和刪除操作。不能同時(shí)進(jìn)行,應(yīng)該先進(jìn)行添加,再進(jìn)行刪除。 單線程就意味著,所有任務(wù)需

    2024年02月06日
    瀏覽(15)
  • Linux 多線程同步機(jī)制(上)

    Linux 多線程同步機(jī)制(上)

    “同步” 的目的 是為了避免數(shù)據(jù)的混亂,解決與時(shí)間有關(guān)的錯(cuò)誤。實(shí)際上,不僅線程需要同步,進(jìn)程間,信號(hào)間等等都需要同步機(jī)制。 線程同步,指一個(gè)線程發(fā)出某一功能調(diào)用時(shí),在沒有得到結(jié)果之前,該調(diào)用不返回。同時(shí) 其他線程為保證數(shù)據(jù)的一致性,不能調(diào)用該功能。

    2024年02月10日
    瀏覽(21)
  • 使用多線程執(zhí)行任務(wù),并獲取返回結(jié)果,附異步實(shí)現(xiàn)

    使用多線程執(zhí)行任務(wù),并獲取返回結(jié)果,附異步實(shí)現(xiàn)

    這里創(chuàng)建了一個(gè)包含三個(gè)線程的固定線程池 線程池的介紹 根據(jù)主機(jī)情況實(shí)現(xiàn)自定義線程池: 也可以通過繼承 ThreadPoolExecutor 類來實(shí)現(xiàn)一個(gè)自定義線程池工具類。ThreadPoolExecutor 是 Java 標(biāo)準(zhǔn)庫中提供的一個(gè)線程池實(shí)現(xiàn),通過繼承它,我們可以實(shí)現(xiàn)自定義的線程池。 下面是一個(gè)繼

    2024年02月16日
    瀏覽(15)
  • JS設(shè)置Ajax為同步或異步

    在使用 AJAX(Asynchronous JavaScript and XML)時(shí),可以通過設(shè)置 XMLHttpRequest 對(duì)象的 async 屬性來控制請(qǐng)求是同步(synchronous)還是異步(asynchronous)。 異步(Asynchronous) :如果 async 屬性設(shè)置為 true ,則 AJAX 請(qǐng)求是異步的。這意味著 JavaScript 不會(huì)等待服務(wù)器的響應(yīng),而是繼續(xù)執(zhí)行其他

    2024年04月27日
    瀏覽(16)
  • 單線程、同步、異步、預(yù)解析、作用域、隱式全局變量、對(duì)象創(chuàng)建、new

    單線程、同步、異步、預(yù)解析、作用域、隱式全局變量、對(duì)象創(chuàng)建、new

    cpu 資源分配的最小單位 一個(gè)進(jìn)程可以有多個(gè)線程 cpu 調(diào)度的最小單位 線程建立在進(jìn)程的建立基礎(chǔ)上的一次程序的運(yùn)行單位 線程分為:?jiǎn)尉€程 多線程 單線程:js是單線程 (同一個(gè)時(shí)間只能完成一個(gè)任務(wù)) 多線程:百度是多線程 同步任務(wù)是指在主線程上排隊(duì)的任務(wù),只有當(dāng)前

    2024年01月22日
    瀏覽(55)
  • js中如何讓將異步變成同步

    JavaScript中可以使用 async/await 將異步操作轉(zhuǎn)換為同步的方式執(zhí)行。async/await是ES2017(也稱ES8)新增的語法,它可以讓異步請(qǐng)求看起來像同步代碼一樣,更加簡(jiǎn)潔易懂。 async 用于聲明一個(gè)函數(shù)為異步函數(shù),該函數(shù)執(zhí)行時(shí)返回一個(gè)Promise對(duì)象,表示當(dāng)前函數(shù)執(zhí)行的結(jié)果。在函

    2024年02月16日
    瀏覽(14)
  • Python多線程與線程池(python線程池ThreadPoolExecutor)concurrent.futures高級(jí)別異步執(zhí)行封裝

    Python多線程與線程池(python線程池ThreadPoolExecutor)concurrent.futures高級(jí)別異步執(zhí)行封裝

    在進(jìn)行復(fù)雜的計(jì)算或處理大量數(shù)據(jù)時(shí),可以通過創(chuàng)建多個(gè)線程來同時(shí)執(zhí)行多個(gè)任務(wù),從而提高程序的執(zhí)行效率。這種技術(shù)稱為多線程編程。 1.1 線程簡(jiǎn)介 線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。一條線程指的是進(jìn)程中一

    2024年02月12日
    瀏覽(25)
  • 正則,JS:this,同步異步,原型鏈筆記整理

    正則表達(dá)式(regular expression)是一種表達(dá)文本模式(即字符串結(jié)構(gòu))的方法,有點(diǎn)像字符串的模板,常常用來按照“給定模式”匹配文本 正則表達(dá)式可以用于以下常見操作: 匹配:判斷一個(gè)字符串是否符合某個(gè)模式。 搜索:在文本中查找符合某個(gè)模式的子串。 替換:將文本

    2024年02月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包