搜尋

首頁  >  問答  >  主體

javascript - js怎麼可以實現多執行緒的效果嗎?

js怎麼可以實現多執行緒的效果嗎?

伊谢尔伦伊谢尔伦2807 天前663

全部回覆(5)我來回復

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-19 10:28:22

    先說一下JS的執行原理:js引擎執行js程式碼的時候是單執行緒的,也就是同一時刻只會有一個行程執行JS程式碼,回呼函數也是一個一個執行的(按照事件發生的順序,而不是程式碼的順序)。 JS中的非同步通訊和定時是由另外的執行緒實現的,脫離js執行緒上下文。以JS定時操作舉例,當JS引擎執行setTimeout(callbackFunction, 100)操作時,它會通知定時線程我需要100毫秒的定時,之後JS引擎進入事件循環。 100毫秒之後,定時引擎會在事件佇列中加入一個時間已到的事件。 JS引擎從佇列讀取時間已到的事件,執行callbackFunction。 如果同一時間有多個事件加入事件佇列,JS引擎也只會一個一個的執行callback。對於非同步也是同樣,JS程式碼發起通訊請求,通訊執行緒執行通訊操作,並在操作完成後將完成事件加入事件佇列。 JS引擎從佇列中取出事件並呼叫回調處理通訊結果。 JS引擎在執行回呼函數的時候,不能同時回應其他事件。

    回覆
    0
  • 黄舟

    黄舟2017-05-19 10:28:22

    js的web worker,可以在後台執行緒進行一些大量的運算而不阻塞主執行緒;透過postmessage,和onmessage和主執行緒通訊;但是有限制不能操作DOM和某些api;詳細的你可以去看文件。

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-19 10:28:22

    javascript是單線程的。

    回覆
    0
  • 黄舟

    黄舟2017-05-19 10:28:22

    javascript 是執行緒的, 要實作多執行緒的效果可以考慮 node.js 透過 node的事件 來達到目的。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:28:22

    如果是用在瀏覽器裡面的話,現在有個service Worker的東西可以在後台跑一些js,就像多開了一個線程的感覺。了解的不多,有需要的話可以了解下

    回覆
    0
  • 取消回覆