js 创建多线程的方法 Worker

js 创建多线程的方法 Worker,第1张

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的单线程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9275533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存