javascript是否在單線程上運行?如果我聲明一個全局數組,並開始在AJAX回調中更改它(例如移除元素),並同時開始更改另一個函數中的同一個數組(使用SetTimeOut調用) - 是否存在競爭條件的風險?javascript是單線程的嗎?
我發現這個線程:javascript race condition,有人說比賽條件都不會在JavaScript中發生,因爲它總是在單線程和單一調用堆棧上運行。這是否取決於瀏覽器如何實現它,還是保證在所有瀏覽器上始終是單線程的?
javascript是否在單線程上運行?如果我聲明一個全局數組,並開始在AJAX回調中更改它(例如移除元素),並同時開始更改另一個函數中的同一個數組(使用SetTimeOut調用) - 是否存在競爭條件的風險?javascript是單線程的嗎?
我發現這個線程:javascript race condition,有人說比賽條件都不會在JavaScript中發生,因爲它總是在單線程和單一調用堆棧上運行。這是否取決於瀏覽器如何實現它,還是保證在所有瀏覽器上始終是單線程的?
是保證是所有的瀏覽器總是單線程?
是的。
當然,像HTTP請求可能在幕後不同的線程工作,但在執行JavaScript代碼時,它可以從一個線程時纔會發生。
爲什麼單threadedness的保證? – dldnh 2012-03-15 18:46:38
@dldnh http://en.wikipedia.org/wiki/Global_Interpreter_Lock – 2012-03-15 18:52:48
JavaScript是單線程的。
引用的討論後在不同機器上的setTimeout
差異...
HTML5介紹了WebWorkers
其執行上的多個背景線程JavaScript的概念。雖然它不支持所有的瀏覽器...
對於網絡工作者來說,它更像是兩個獨立的單線程腳本運行並向對方發送消息,而不是使用一個多線程腳本。一個變量在兩個線程中都不可見,工作人員無法操作DOM等。 – 2012-03-15 18:55:38
有可能是競爭條件,由於網絡延遲,如果你使用Ajax的工作,但它本身的JavaScript不是因爲因爲它是單-threaded。 – pimvdb 2012-03-15 18:45:06
不太總是:http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded – phazei 2013-03-28 18:42:54