js怎麼可以實現(xiàn)多執(zhí)行緒的效果嗎?
小伙看你根骨奇佳,潛力無限,來學(xué)PHP伐。
先說一下JS的執(zhí)行原理:js引擎執(zhí)行js程式碼的時候是單執(zhí)行緒的,也就是同一時刻只會有一個行程執(zhí)行JS程式碼,回呼函數(shù)也是一個一個執(zhí)行的(按照事件發(fā)生的順序,而不是程式碼的順序)。 JS中的非同步通訊和定時是由另外的執(zhí)行緒實現(xiàn)的,脫離js執(zhí)行緒上下文。以JS定時操作舉例,當(dāng)JS引擎執(zhí)行setTimeout(callbackFunction, 100)操作時,它會通知定時線程我需要100毫秒的定時,之後JS引擎進入事件循環(huán)。 100毫秒之後,定時引擎會在事件佇列中加入一個時間已到的事件。 JS引擎從佇列讀取時間已到的事件,執(zhí)行callbackFunction。 如果同一時間有多個事件加入事件佇列,JS引擎也只會一個一個的執(zhí)行callback。對於非同步也是同樣,JS程式碼發(fā)起通訊請求,通訊執(zhí)行緒執(zhí)行通訊操作,並在操作完成後將完成事件加入事件佇列。 JS引擎從佇列中取出事件並呼叫回調(diào)處理通訊結(jié)果。 JS引擎在執(zhí)行回呼函數(shù)的時候,不能同時回應(yīng)其他事件。
js的web worker,可以在後臺執(zhí)行緒進行一些大量的運算而不阻塞主執(zhí)行緒;透過postmessage,和onmessage和主執(zhí)行緒通訊;但是有限制不能操作DOM和某些api;詳細的你可以去看文件。
javascript 是執(zhí)行緒的, 要實作多執(zhí)行緒的效果可以考慮 node.js 透過 node的事件 來達到目的。
如果是用在瀏覽器裡面的話,現(xiàn)在有個service Worker的東西可以在後臺跑一些js,就像多開了一個線程的感覺。了解的不多,有需要的話可以了解下