Worker 支持主流的浏览器 IE10 以下不支持
ajs 内容
var i =0
setInterval((function () {
postMessage(i++)
}),1000)
使用 postMessage 向主线程 传送消息
var worker =new Worker('ajs') // 写入需要引入的 js
consolelog(worker)
workeronmessage =function () {
consolelog(eventdata)
}
//用于关闭worker线程
workerterminate();
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法 因为我们开始常常以为调用了就会按既定的方式执行 我想不少人都深有同感 例如 [javascript]
setTimeout( function(){ alert(‘你好! ); } );
setInterval( callbackFunction );
setTimeout( function(){ alert(’你好! ); } );
setInterval( callbackFunction );
认为setTimeout中的问候方法会立即被执行 因为这并不是凭空而说 而是JavaScript API文档明确定义第二个参数意义为隔多少毫秒后 回调方法就会被执行 这里设成 毫秒 理所当然就立即被执行了
同理对setInterval的callbackFunction方法每间隔 毫秒就立即被执行深信不疑!
但随着JavaScript应用开发经验不断的增加和丰富 有一天你发现了一段怪异的代码而百思不得其解:
[javascript]
div onclick = function(){
setTimeout( function(){document getElementById( inputField ) focus();} );
};
div onclick = function(){
setTimeout( function(){document getElementById( inputField ) focus();} );
};
既然是 毫秒后执行 那么还用setTimeout干什么 此刻 坚定的信念已开始动摇
直到最后某一天 你不小心写了一段糟糕的代码:
[javascript]
setTimeout( function(){ while(true){} } );
setTimeout( function(){ alert(‘你好! ); } );
setInterval( callbackFunction );
setTimeout( function(){ while(true){} } );
setTimeout( function(){ alert(’你好! ); } );
setInterval( callbackFunction );
第一行代码进入了死循环 但不久你就会发现 第二 第三行并不是预料中的事情 alert问候未见出现 callbacKFunction也杳无音讯!
这时你彻底迷惘了 这种情景是难以接受的 因为改变长久以来既定的认知去接受新思想的过程是痛苦的 但情事实摆在眼前 对JavaScript真理的探求并不会因为痛苦而停止 下面让我们来展开JavaScript线程和定时器探索之旅!
出现上面所有误区的最主要一个原因是:潜意识中认为 JavaScript引擎有多个线程在执行 JavaScript的定时器回调函数是异步执行的
而事实上的 JavaScript使用了障眼法 在多数时候骗过了我们的眼睛 这里背光得澄清一个事实:
JavaScript引擎是单线程运行的 浏览器无论在什么时候都只且只有一个线程在运行JavaScript程序
JavaScript引擎用单线程运行也是有意义的 单线程不必理会线程同步这些复杂的问题 问题得到简化
那么单线程的JavaScript引擎是怎么配合浏览器内核处理这些定时器和响应浏览器事件的呢
下面结合浏览器内核处理方式简单说明
浏览器内核实现允许多个线程异步执行 这些线程在内核制控下相互配合以保持同步 假如某一浏览器内核的实现至少有三个常驻线程:javascript引擎 线程 界面渲染线程 浏览器事件触发线程 除些以外 也有一些执行完就终止的线程 如>
nodejs的单线程是指运行脚本的线程,
当异步时,会有外部的线程运行,当外部线程工作完成后会触发一个状态变更事件,此时注册的回调函数被激活,等待执行。
所以说整个软件来看并非严格单线程的。只是应用层部分的js脚本是单线程的。
其实js的异步 就是开辟一个新的线程。和java的多线程机制是一样的 ,不过js吧线程细节给屏蔽掉了。理解函数回调的概连,处理多线程任务比java 更方便。不过js 确实不太适合高cpu的程序,比较适合高并发
js本身是单线程的,这个概念是对的。浏览器还有个知识点叫“执行队列”你可以了解下。
js需要先将自己加入到执行队列中由浏览器来解析,但是执行队列时允许部分元素或者说是对象插队的,比如ajax。于是就形成了js的单线程,但是看起来像是多线程的
线程:一个线程是一个程序内部的一个顺序控制流。即:一个或多个线程组成了一个进程。 进程:可以简单的理解为一个正在运行的程序。 进程与进程间是互相独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响。
以上就是关于js 创建多线程的方法 Worker全部的内容,包括:js 创建多线程的方法 Worker、JavaScript能不能多线程、nodejs的单线程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)