javascript多线程能力

问题描述:JavaScript 如果拥有多线程能力会怎样 大家好,小编来为大家解答以下问题,js 多线程有几种实现方法,多线程工作能力是什么,现在让我们一起来看看吧!

JavaScript 如果拥有多线程能力会怎样

javascript多线程能力的相关图片

JS本身是为GUI而生的语言,GUI生而是多线程的,但生而也是单线程的。因为竞争访问的问题,只有一个UI线程是一种安全的方式。比如C# WinForm中只允许一个线程访问GUI,其他线程需要以委托的形式来访问GUI。

JS曾经在Web GUI中表现良好,因为过去的Web GUI规模小,只要注意一些写法问题,不太容易遇到阻塞UI线程的问题,直到应用程序变复杂了才开始注意到这些问题。浏览器变得更快一定程度上延缓了这些问题,但是终究还是对并发的需求越来越大。

WebWorker是真多线程——当然我是说从实现上讲,它是多个线程,至于楼主所说的,没有共享全局变量、没有锁,我觉得没有必要太纠结。多线程是一种并发模型,并且也许是受众最广泛的一种。WebWorker用的是基于通讯的并发模型,类似于erlang、Go,用的是Share Nothing的哲学(虽然终究还是有SharedArrayBuffer),它们都是经过了工业级别考验的。

有了share那么必然会有竞争访问,于是就有了锁,这些都是自然而然的。但是,很明显,JS的发展倾向于share nothing,不然就干脆把整个global对象share了算了。

至于为什么留SharedArrayBuffer,我觉得这只能说是“给不给”这个东西,不是“要不要”这样用了。这就和Go有点像了,应为闭包的存在GoRoutine之间也可以share,于是它也提供了锁,提供了mutex,但是它所建议的哲学还是用channel,用CSP,于是大家通常也都还是这么用。用GoRoutine当线程用,让channel滚蛋,还是用锁,还是可以做并发编程啊,但是好像没人这么弄吧,哈哈。

多线程只是手段,并发才是目的,只要能实现目的,手段就是个方法论而已。

至于多线程和异步之间我感觉没有太直接的绑定关系吧,单线程可以异步,多线程也可以同步。

如果JS一开始就具有多线程的话,现今JS程序员可能会少一半吧(笑。

JavaScript如何实现多线程?的相关图片

JavaScript如何实现多线程?

会混乱起来,就比如加载DOM,本来一次只能操作一个滴,但多线程一次性操作多个,有些DOM都没有加载出来,而js就已经执行了!

如何实现javascript多线程同时运行?的相关图片

如何实现javascript多线程同时运行?

JS为我们提供了一个Worker的类,它的作用就是为了解决这种阻塞的现象。当我们使用这个类的时候,它就会向浏览器申请一个新的线程。这个线程就用来单独执行一个js文件。

var worker = new Worker(js文件路径);。

那么这个语句就会申请一个线程用来执行这个js文件。

当然,在主线程中有一些方法来实现对新线程的控制和数据的接收。在这里,我们只说比较常用的几个方法。

1 //postMessage(msg);。

2 //postMessage方法把在新线程执行的结果发送到浏览器的js引擎线程里。

3 worker.onmessage = function(){。

4

7 setTimeout( function(){。

8 worker.terminate();。

9 //terminate方法用于关闭worker线程。

10 },2000)

11

12 setTimeout( function(){。

13 worker = new Worker("js/test22.js");。

14 //再次开启worker线程。

15 },3000)

在新线程中使用postMessage()方法可以向主线程中发送一些数据,主线程中使用worker的onmessage事件来接收这些数据,这样就实现了js的多线程执行和多线程之间数据的传递。

JavaScript可否多线程的相关图片

JavaScript可否多线程

javascript没有多线程,所以也不存在多线程同时运行的说法。平时写代码的时候需要考虑尽量避免线程阻塞。

比较好的方法就是尽量使用异步+回调的方式进行处理。

JavaScript可否多线程

不可以。javascript是只能在一个线程中顺序执行的。

js有时候给人造成可以并发执行错觉,是因为js跟外部线程之间是可以并发执行的。

js执行过程实际上就是不停地在一个消息循环队列中读取事件。

原文地址:http://www.qianchusai.com/3cjn79m6.html

今日头条界面新变化,今日头条界面新变化怎么设置

今日头条界面新变化,今日头条界面新变化怎么设置

javascript包含哪几部分,简述javascript组成的三部分内容

javascript包含哪几部分,简述javascript组成的三部分内容

javascript可以用中文命名吗,html可以用中文命名吗?

javascript可以用中文命名吗,html可以用中文命名吗?

今日头条怎么和qq浏览器一样,今日头条怎么和qq浏览器一样呢

今日头条怎么和qq浏览器一样,今日头条怎么和qq浏览器一样呢

禁用javascript的好处,浏览器怎么禁用javascript

禁用javascript的好处,浏览器怎么禁用javascript

初学者如何学好javascript,初学者如何学好腹腔镜

初学者如何学好javascript,初学者如何学好腹腔镜

javascript类型定义,javascript的基本类型包括

javascript类型定义,javascript的基本类型包括

javascript前身是

javascript前身是

网站出现javascript什么意思

网站出现javascript什么意思

javascript设置技巧

javascript设置技巧