为什么Javascript SetTimeout()不是多线程的

zb'*_*zb' 11 javascript

我有一个测试:

HTML:

<div id="f1">Empty</div>
<div id="f2">Empty</div>

?
Run Code Online (Sandbox Code Playgroud)

JS:

var s1 = function() {
    for (i = 1; i < 1000000000; i++) {
        var b = i * i;
    }
    $('#f1').html('Set');
}

var s2 = function() {
    if ($('#f1').html() == 'Empty') {
        $('#f2').html('Multi Thread');
        return;            
    };
    $('#f2').html('One Thread');
}

setTimeout(s2,110);
setTimeout(s1,100);?
Run Code Online (Sandbox Code Playgroud)

是否有任何真正的理由为什么setTimeOut()不能在不同的线程中运行,而是像事件模型一样?

的jsfiddle

DVK*_*DVK 16

Javascript本身不是多线程的,也不是非多线程的.但是,目前在主流浏览器中实现的Javascript的具体实现大多是单线程的.

此外,对于正确的多线程,语言需要具有共享内存,锁,信号量和其他并发编程工具的工具,当前定义的JavaScript没有(例如,没有办法描述并发JS线程如何控制谁更新DOM对象当然是共享的,因为窗口中只有一个DOM).

有人企图让JS更并行-看网络工作者,英特尔的河足迹,谷歌的HTML5工作更多.