我曾經認爲異步就像多線程一樣平穩。多任務將並行完成。然而,在JavaScript中我寫這個,似乎dosomething
永遠不會發生。異步和多線程之間的內部區別是什麼?
setTimeout(1000, dosomething)
while(true){}
爲什麼?
我曾經認爲異步就像多線程一樣平穩。多任務將並行完成。然而,在JavaScript中我寫這個,似乎dosomething
永遠不會發生。異步和多線程之間的內部區別是什麼?
setTimeout(1000, dosomething)
while(true){}
爲什麼?
Node.js是一個異步語言single threaded。作爲another answer
提到的JavaScript是單線程(與網絡工作者外,但那是irrelavent這個例子,所以我們將忽略它)。這意味着setTimeout實際上做的是安排一些代碼在未來至少一段時間之後被執行,但是隻有當瀏覽器停止了當時在渲染線程上執行的任何其他操作時,可以呈現HTML,或執行JavaScript。
在您的示例中,while循環的執行永不停止,控制永遠不會返回到頂層,因此從不執行預定的setTimeout
函數。
多線程是實現異步編程的多種方法之一。對事件的反應和屈服於調度器是另一種方式,並且正好是實現javascript in the browser的方式。
在您的示例中,允許您控制並允許您撥打setTimeout
的事件必須完成,以便JavaScript引擎可以監視超時並在到期時調用您的doSomething
回撥。
可能重複[如何闡明異步和並行編程之間的區別?](https://stackoverflow.com/questions/6133574/how-to-articulate-the-difference-between-asynchronous-and-parallel-編程) –