Heim > Fragen und Antworten > Hauptteil
Wie kann js einen Multithreading-Effekt erzielen?
过去多啦不再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引擎在执行回调函数的时候,不能同时响应其他事件。
黄舟2017-05-19 10:28:22
js的web worker,可以在后台线程进行一些大量的运算而不阻塞主线程;通过postmessage,和onmessage和主线程通讯;但是有限制不能操作DOM和某些api;详细的你可以去看文档。
漂亮男人2017-05-19 10:28:22
如果是用在浏览器里面的话,现在有个service Worker的东西可以在后台跑一些js,就像多开了一个线程的感觉。了解的不多,有需要的话你可以了解下