2
- 是JavaScript的設計阻止或不允許同步阻止IO?
- 爲什麼在Javascript中沒有睡眠API?這是由於上述點?
- 可以瀏覽器有多個單線程執行JavaScript?爲什麼它總是單線程?
以上幾點(由於瀏覽器限制)是否使JavaScript成爲服務器端非阻塞語言的理想語言?是否可以在沒有c代碼的情況下在純Javascript(nodejs)中編寫同步阻塞IO?
以上幾點(由於瀏覽器限制)是否使JavaScript成爲服務器端非阻塞語言的理想語言?是否可以在沒有c代碼的情況下在純Javascript(nodejs)中編寫同步阻塞IO?
瀏覽器只會在一個線程中運行Javascript(至少每個域,除Web Worker以外)。
這主要是爲了簡單;直到最近,沒有人爲Javascript編寫線程API。
爲了使瀏覽器更易於編寫(以及更快速),該線程是瀏覽器UI線程。因此,Javascript中的任何同步工作(或睡眠呼叫)都會凍結瀏覽器。
這就是爲什麼同步操作非常令人沮喪的原因。
每個*頁*一個線程,而不是每個域。 – josh3736
@ josh3736:這不一定是真的。如果你調用'window.open()',新窗口必須共享你的UI線程。 – SLaks
[That's true](http://jsfiddle.net/josh3736/V2FTT/),但僅僅是因爲JS允許打開窗口保留對打開窗口內部的引用(因此必須共享一個線程)。 **打開的頁面所在的域名無關緊要。**另外,如果您在兩個窗口中打開兩個小提琴副本並阻止其中一個,另一個不受影響(即使它們位於同一個域中)。 – josh3736