2017-08-06 103 views
0

我曾經認爲異步就像多線程一樣平穩。多任務將並行完成。然而,在JavaScript中我寫這個,似乎dosomething永遠不會發生。異步和多線程之間的內部區別是什麼?

setTimeout(1000, dosomething) 
while(true){} 

爲什麼?

+0

可能重複[如何闡明異步和並行編程之間的區別?](https://stackoverflow.com/questions/6133574/how-to-articulate-the-difference-between-asynchronous-and-parallel-編程) –

回答

1

Node.js是一個異步語言single threaded。作爲another answer

提到的JavaScript是單線程(與網絡工作者外,但那是irrelavent這個例子,所以我們將忽略它)。這意味着setTimeout實際上做的是安排一些代碼在未來至少一段時間之後被執行,但是隻有當瀏覽器停止了當時在渲染線程上執行的任何其他操作時,可以呈現HTML,或執行JavaScript。

在您的示例中,while循環的執行永不停止,控制永遠不會返回到頂層,因此從不執行預定的setTimeout函數。

0

多線程是實現異步編程的多種方法之一。對事件的反應和屈服於調度器是另一種方式,並且正好是實現javascript in the browser的方式。

在您的示例中,允許您控制並允許您撥打setTimeout的事件必須完成,以便JavaScript引擎可以監視超時並在到期時調用您的doSomething回撥。

相關問題