是否保證JavaScript是單線程的?

衆所周知,JavaScript在全部現代瀏覽器實現中都是單線程的,可是它是在任何標準中指定的,仍是僅是傳統的? 假定JavaScript始終是單線程的,是否徹底安全? javascript


#1樓

是的,儘管使用諸如setInterval和xmlhttp回調之類的任何異步API時,您仍然會遇到一些併發編程問題(主要是競爭條件)。 java


#2樓

我會說是-由於若是瀏覽器的javascript引擎異步運行它,則幾乎全部現有(至少全部不重要的)javascript代碼都會中斷。 程序員

此外, HTML5已經指定了將Web多線程引入基本Javascript中的Web Workers (用於多線程javascript代碼的顯式,標準化API)這一事實幾乎沒有意義。 編程

其餘註解者注意:即便setTimeout/setInterval ,HTTP請求onload事件(XHR)和UI事件(單擊,焦點等)提供了多線程的粗略印象-它們仍然都沿着單個時間軸執行-一次-所以,即便咱們事先不知道它們的執行順序,也沒必要擔憂事件處理程序,定時函數或XHR回調的執行期間外部條件會發生變化。) 瀏覽器


#3樓

嗯,Chrome是多進程的,我認爲每一個進程都處理本身的Javascript代碼,但據代碼所知,它是「單線程」。 安全

Javascript不支持多線程,至少沒有明確支持,所以沒有任何區別。 多線程


#4樓

是的,儘管Internet Explorer 9會在單獨的線程上編譯Javascript以準備在主線程上執行。 可是,這對於您做爲程序員來講並無任何改變。 併發


#5樓

JavaScript / ECMAScript旨在駐留在主機環境中。 也就是說,除非宿主環境決定解析並執行給定腳本,並提供使JavaScript實際上有用的環境對象(例如瀏覽器中的DOM),不然JavaScript實際上不會作任何事情異步

我認爲給定的功能或腳本塊將逐行執行,這對於JavaScript是有保證的。 可是,主機環境可能能夠同時執行多個腳本。 或者,主機環境能夠始終提供提供多線程的對象。 setTimeoutsetInterval是主機環境的示例,或者至少是僞示例,提供了進行某種併發(即便不是徹底併發)的方式。 函數

相關文章
相關標籤/搜索