首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript (缺乏) concurrency[threads] (非)问题

javascript (缺乏) concurrency[threads] (非)问题
EN

Stack Overflow用户
提问于 2013-09-20 19:09:35
回答 2查看 88关注 0票数 0

这不是什么问题,但更像是一个突然的开悟。

因此,我有两个初始化函数,它们在javascript中是连续的,如下所示:

代码语言:javascript
复制
object1.Init();
object2.Init();

所以我想,为了让它们“更快”,我可以尝试同时调用它们,这样它们就可以通过这种方法同时运行:

代码语言:javascript
复制
setTimeout(function() {
    object1.Init();
}, 0);

setTimeout(function() {
    object2.Init();
}, 0);

我的理由是,如果我这样做,这两个功能将启动“同时”,然后每一个花时间结束(一个可能结束在300毫秒,另一个在500毫秒)。

哇,这是我最初想的一个好主意,但后来我意识到,两个Init()函数都使用一个全局变量,所以我非常害怕一个函数可能被另一个修改,从而导致灾难性的结果。

所以我做了这个简单的测试,看看我的假设是否正确。

代码语言:javascript
复制
var cnt = 0;
var x1 = 0;
var x2 = 0;

setTimeout(function() {
    t1 = new Date().getTime();
    for (cnt=0; cnt<1000000000; cnt++) {
        x1++;
    }
    t2 = new Date().getTime();
    document.getElementById("mydiv").innerHTML += "<br>" + (t2-t1) + " milliseconds " + x1 + "#" + t1 + "#" + t2;
}, 0);

setTimeout(function() {
    var t3 = new Date().getTime();
    for (cnt=0; cnt<1000000000; cnt++) {
        x2++;
    }
    var t4 = new Date().getTime();
    document.getElementById("mydiv").innerHTML += "<br>" + (t4-t3) + " milliseconds " + x2 + "#" + t3 + "#" + t4;
}, 0);

其结果是:

代码语言:javascript
复制
2504 milliseconds 1000000000#1379702812419#1379702814923
2514 milliseconds 1000000000#1379702814923#1379702817437

真正告诉我的是:

( a) javascript中没有并发性,因为第二个循环是在第一个循环结束后开始的。

因此,我是安全的,全局变量不会受到影响

( c)使用这样的settimeout()运行两个init()函数是没有意义的

我猜,a)是因为javascript是单线程的,这真是令人遗憾(是的,我知道web工作者)。

EN

回答 2

Stack Overflow用户

发布于 2013-09-20 19:11:37

( a) javascript中没有并发性,因为第二个循环是在第一个循环结束后开始的。

对,正如您自己说的,JavaScript运行单线程,不存在同步操作。

因此,我是安全的,全局变量不会受到影响

是的你很安全。

( c)使用这样的settimeout()运行两个init()函数是没有意义的

的确..。

票数 1
EN

Stack Overflow用户

发布于 2013-09-20 21:37:57

您在全球范围内讨论"javascript“,但在浏览器的上下文中讨论它。

我鼓励您查看异步库。我用在Node上。它“同时”执行多个操作,使用完全标准的处理器切片。从技术上讲,它可能是一个单独的线程,但不像您习惯的那样(可能),每一行都会阻塞,在执行前一行之前不会发生任何事情。只要有异步回调,就会有模拟多个并发线程的行为。

为此,编写一个HTTP请求(或7),并在不同的非阻塞时间查看它们的回调。或者尝试文件系统调用,或者SQL调用,或者其他任何尝试与环境打交道的方法。在每一种情况下,你最终都会有“多线程”行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18924150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档