js的多线程探索之旅

众所周知js是单线程的,最直观的感觉是代码碰到死循环,其它代码都会被冻结,浏览器的操作也全部未响应。
目前已经有js多线程的提案,不过估计要等到es7+了。

Concurrent.Thread.js

Concurrent.Thread.js是一位日本人写的用单线程模拟多线程效果的js库。

Worker

使用Web Worker, 我们可以在浏览器后台运行Javascript, 而不占用浏览器自身线程。Web Worker可以提高应用的总体性能,并且提升用户体验。

不过一般Worker需要一个js文件来实例化,如果要动态的执行js代码,这显然是不灵活的。
为此广大人民群众提出了更简单的处理方式。

<html>  
<body>  
<script id="worker" type="javascript/worker">  
self.postMessage("Message from Web Worker.");  
</script>  
<script>  
var worker_blob = new Blob([document.getElementById("worker").textContent]);  
var worker = new Worker(window.URL.createObjectURL(worker_blob));  
worker.onmessage = function(event) {  
    console.log("Received event: " + event.data);  
};  
</script>  
</body>  
</html>

vm

在Node.JS中我们可以使用虚拟机完成类似的功能。
require('vm');

其他

我希望可以在Concurrent.Thread.js的基础上加以改造,创造出更好用的单线程模拟工具。因为模拟单线程可以方便的共享内存数据,而且可以创建几百上千的模拟线程也不用担心负载过高,因为本质上它们还是在一个线程内。

一旦这个计划完成,我还有一个大胆的想法。。。