JavaScript (缺乏) 并发[线程] (非)问题
javascript (lack of) concurrency[threads] (non)issues
这不是一个问题,而更像是一个突然的启蒙。
所以我有两个初始化函数,它们在 javascript 中连续运行,如下所示:
object1.Init();
object2.Init();
所以我想,为了使它们"更快",我可以尝试同时调用它们,以便它们可以通过这种方法同时运行:
setTimeout(function() {
object1.Init();
}, 0);
setTimeout(function() {
object2.Init();
}, 0);
我的理由是,如果我这样做,两个函数将"同时"启动,然后每个函数都需要时间才能结束(一个可能在 300 毫秒内结束,另一个可能在 500 毫秒内结束)。
哇,我最初认为这是一个好主意,但后来我意识到两个 Init() 函数都使用全局变量,所以我害怕一个可以被另一个改变,从而导致灾难性的结果。
所以我最终做了这个简单的测试,看看我的假设是否正确。
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);
其结果是:
2504 milliseconds 1000000000#1379702812419#1379702814923
2514 milliseconds 1000000000#1379702814923#1379702817437
真正告诉我的是:
a) JavaScript 中没有并发这样的东西,因为第二个循环在第一个循环结束后开始
b)因此我很安全,全局变量不会受到影响
c) 像这样使用 setTimeout() 运行两个 init() 函数是没有意义的
我想a)是由于javascript是单线程的,这真的是一种耻辱(是的,我知道网络工作者)。
a) JavaScript 中没有并发这样的东西,因为第二个循环在第一个循环结束后开始
是的,正如你自己所说,JavaScript 运行单线程,没有同时操作这样的东西。
b)因此我很安全,全局变量不会受到影响
是的,你很安全。
c) 像这样使用 setTimeout() 运行两个 init() 函数是没有意义的
事实上。。。
你在全球范围内谈论"javascript",但在浏览器的上下文中讨论它。
我鼓励你看看异步库。 我在节点中使用它。 它"同时"执行多个操作,使用完全标准的处理器切片。从技术上讲,它可能是一个线程,但不是你(可能)习惯的方式,每一行都阻塞,在前一行执行之前什么都不会发生。 每当有异步回调时,您都会有模拟多个并发线程的行为。
要尝试这一点,请编写一个 HTTP 请求(或 7 个),并观察它们的回调在不同的非阻塞时间返回。 或者尝试文件系统调用、SQL 调用或任何其他冒险参与环境的行为。在任何情况下,您最终都会出现"多线程"表演行为。
- 在javaservlet doPost方法中启动线程时,无法返回异常消息
- javascript中的多线程
- Javascript支持多线程吗
- 如何在nodejs中创建线程池
- 起始节点.js用于并行的线程池
- Doppio:多线程是如何工作的,有什么限制吗
- 为什么Javascript SetTimeout()不是多线程的
- Selenium异步脚本在自己的线程中阻塞其他脚本
- Node.js如何使用更少的线程来处理多个连接
- Node.js如何用一个线程处理同时请求
- 从多线程C++插件回调NodeJS Javascript函数
- 电子框架是否允许网络工作者进行多线程处理
- 追加新web组件时出现线程问题
- JavaScript (缺乏) 并发[线程] (非)问题
- 线程休眠和设置超时问题
- JQuery / JavaScript线程问题-模态对话框
- ActiveX多线程调用javascript回调例程出现问题
- phonegap ios和android的多线程问题
- JavaScript数组争用条件/线程问题
- 处理javascript/jquery中的多线程问题