Javascript的并行运算实现代码

所属分类: 网络编程 / JavaScript 阅读数: 1537
收藏 0 赞 0 分享
下面我就个人观点猜测一下,并行运算将会怎样支持前端javascript的.

1 不太可能的进化

显示线程的支持
如果在Javascript中支持显示线程,那么可能是一种灾难,目前的浏览器解析Javascript并执行都是在浏览器的ui线程中工作的.
比如你可以在Javascript中运行while(true),这时浏览器界面就会停止响应.或者通过我之前的文章(编译Javascript引擎,为JavaScript提供睡眠功能:http://www.cnblogs.com/ioriwellings/archive/2010/08/16/1800416.html)了解UI界面被阻塞的过程.
另外如果显示支持线程必然也会支持线程间数据同步的同步原语功能,那就会出现这样的问题:
在一个函数中获取锁,而在另一个函数中释放锁,但是如果另一个函数出错怎么办,或者另一个函数是从另一个文件中引用的,又碰巧那个文件由于某些原因(网络问题,编码问题)没有加载进来,这时就会发生死锁.
所以根据上面的一些原因,在JavaScript支持显示线程还不太现实.

2 有可能的进化

隐式的并行支持
类似于openMP的宏指令,
下面代码声明并行运算FOR循环:
复制代码 代码如下:

#pragma omp parallel for
for (i = 0; i < N; i++)
  a[i] = 2 * i;

这种方式可以避免前面遇到的各种麻烦,并行的运算被托管于Javascript引擎内部,所以Javascript引擎有更多的空间处理优化这些并行运算,比如在内部调用openMP,Intel TBB的并行功能.
所以我推测这种方式将会很可能被采用.

3 处理并行异常

由于Javascript代码被隐式托管于并行线程处理,所以你可能不会马上得到某个线程的异常状态,而是要等到全部的线程运行结束后才会知道某些代码出现异常.

4 调试器的进化

会产生支持线程感知的Javascript调试器,能够分析每个线程中的信息,并且能够冻结/恢复某个线程的运行.
当然了,类似于firebug这样的用Javascript脚本写的调试器也将会有更大的提升,但是我想更理想的还是本地应用程序的调试器将会成为主流,比如:visual studio.

5 结语

  并行运算将会影响前台Javascript的执行性能,很多用Javascript写的前台效果,Javascript游戏的性能将得到改变与提升. 可是我会看到javascript的这种转变吗?

如果实在等不到,还是可以编译现有的js引擎,并添加并行运算接口,然后自已发布浏览器,让客户下载,多核的功能还是可能利用到的.

但是还要兼容现在javascript规范,不然其它浏览器将不能识别你的代码,所以就需要在js引擎内部对原有串行代码分析,而且要准确,将可以转换为并行的代码进行优化.我想这个任务还是很坚巨的.
更多精彩内容其他人还在看

jQuery LigerUI 使用教程表格篇(1)

ligerGrid是ligerui系列插件的核心控件,用户可以快速地创建一个美观,而且功能强大的表格,支持排序、分页、多表头、固定列等等
收藏 0 赞 0 分享

JavaScript中常用的运算符小结

JavaScript中常用的运算符小结,需要的朋友可以参考下。
收藏 0 赞 0 分享

深入理解JavaScript系列(13) This? Yes,this!

在这篇文章里,我们将讨论跟执行上下文直接相关的更多细节。讨论的主题就是this关键字。实践证明,这个主题很难,在不同执行上下文中this的确定经常会发生问题
收藏 0 赞 0 分享

javascript (用setTimeout而非setInterval)

javascript (用setTimeout而非setInterval)如果用setInterval 可能出现 下次调用会在前一次调用前调用
收藏 0 赞 0 分享

JavaScript中两个感叹号的作用说明

用两个感叹号的作用就在于,如果明确设置了o中flag的值(非null/undefined/0""/等值),自然test就会取跟o.flag一样的值;如果没有设置,test就会默认为false,而不是null或undefined
收藏 0 赞 0 分享

javascript写的简单的计算器,内容很多,方法实用,推荐

最近用javascript写了一个简单的计算器,自己测试感觉还好,代码都给了注释,非常不错,推荐大家学习。
收藏 0 赞 0 分享

js的表单操作 简单计算器

javascript写的简单的加减乘除计算器,里面涉及到一些方法还是很实用的哦,新手不要错过
收藏 0 赞 0 分享

Jquery中删除元素的实现代码

empty用来删除指定元素的子元素,remove用来删除元素,或者设定细化条件执行删除
收藏 0 赞 0 分享

javaScript 利用闭包模拟对象的私有属性

JavaScript缺少块级作用域,没有private修饰符,但它具有函数作用域。作用域的好处是内部函数可以访问它们的外部函数的参数和变量(除了this和argument
收藏 0 赞 0 分享

为JavaScript类型增加方法的实现代码(增加功能)

大家在js开发过程中有些功能已经满足不了我们的需求,或没有我们需要的功能,那么我们就可以自己扩展下,个性化js
收藏 0 赞 0 分享
查看更多