Javascript的并行运算实现代码


Posted in Javascript onNovember 19, 2010

下面我就个人观点猜测一下,并行运算将会怎样支持前端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引擎内部对原有串行代码分析,而且要准确,将可以转换为并行的代码进行优化.我想这个任务还是很坚巨的.

Javascript 相关文章推荐
innerHTML 和 getElementsByName 在IE下面的bug 的解决
Apr 09 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
Jun 28 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
给html超链接设置事件不使用href来完成跳
Apr 20 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
js遍历获取表格内数据的方法(必看)
Apr 06 Javascript
Angular.JS通过指令操作DOM的方法
May 10 Javascript
你应该知道的几类npm依赖包管理详解
Oct 06 Javascript
运用js实现图层拖拽的功能
May 24 Javascript
实现一个 Vue 吸顶锚点组件方法
Jul 10 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
Nov 04 Javascript
js里的prototype使用示例
Nov 19 #Javascript
Google 静态地图API实现代码
Nov 19 #Javascript
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 #Javascript
JS运行耗时操作的延时显示方法
Nov 19 #Javascript
function foo的原型与prototype属性解惑
Nov 19 #Javascript
高亮显示web页表格行的javascript代码
Nov 19 #Javascript
javascript tips提示框组件实现代码
Nov 19 #Javascript
You might like
PHP的历史和优缺点
2006/10/09 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
jquery遍历json对象集合详解
2016/05/18 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
js实现小星星游戏
2020/03/23 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
Python随机读取文件实现实例
2017/05/25 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
维德科技C#面试题笔试题
2015/12/09 面试题
公司晚会主持词
2014/03/22 职场文书
计算机专业自荐信
2014/05/24 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python