2009-10-15 12 views
7

Javascript non ha thread visibili (ancora - I thread di lavoro stanno arrivando, vedere più informazioni in JavaScript and Threads).Come funzionano i "molteplici contesti di esecuzione" di Javascript?

Tuttavia, sembra che esistano più contesti di esecuzione che sembrano esistere contemporaneamente: indipendenti, quando si dispone di più finestre di Firefox e più schede Firefox/IE.

Quando si dispone di più iframe in una pagina, ognuno ha il proprio contesto di esecuzione, ma hanno dati condivisi. Se due iframe si trovano nello stesso dominio, possono accedere al DOM dell'altro e chiamare le rispettive funzioni. Tuttavia, non sono riuscito a trovare su Google una descrizione del modello di pianificazione, ad esempio:

  • parallelo/preventivo, nel qual caso - è possibile sospendere temporaneamente? qualsiasi forma di mutua esclusione?
  • cooperativa, nel qual caso - come si cede a un altro contesto?
  • non sovrapposto: vale a dire, un gestore di eventi nel frame principale deve tornare prima che un gestore di eventi nell'iframe possa essere richiamato (e viceversa)?

Quindi la domanda è:

  • Esiste un contesto garantito il passaggio del modello?
  • In caso negativo, quali sono i modelli di commutazione di contesto prevalenti?
    • Sembra che Firefox e IE abbiano una pianificazione non sovrapposta tra i contesti della stessa scheda e cooperativamente tra diverse schede/finestre nello stesso processo, ma non ne sono sicuro.
    • Chrome utilizza lo scheduler di sistema per schede diverse (potrebbe utilizzare più core, che si trova nel gruppo parallelo/preemptive, ma non so cosa utilizzi per più frame nella stessa scheda.
    • Non ho idea su Safari o Opera.

Grazie!

risposta

6

in Firefox, tutto il codice JavaScript in pagine web viene eseguito sul thread principale, quindi è tutto a puntate. Ogni frame avrà un proprio JSContext, e ogni metodo è eseguito fino al completamento. Non c'è possibilità di prelazione.

+1

(Lo sai, ma per completezza: questo è Firefox 3.5. Poiché i browser diventano multiprocesso, poiché Chrome è già presente e Firefox saranno diverse versioni successive, le schede non correlate probabilmente verranno eseguite indipendentemente, mentre (almeno per ora) per "correlate" "schede gli sviluppatori del browser cercano di conservare la semantica" da eseguire a completamento ". – Nickolay

+0

Certo, ma Firefox non lo fa ancora, e non lo farà almeno fino a Firefox 4.0;) – sdwilsh

+0

Le schede separate sono su processi separati, nessun problema Là. Iframe/frame all'interno di una scheda condividono lo stesso thread. Gli sviluppatori Js possono ancora respirare facilmente e non preoccuparsi della concorrenza. –