2015-11-18 9 views
5

Ho sempre pensato che i web worker creavano thread separati, ma oggi mi sono imbattuto nelle specifiche sul sito w3c. Di seguito è riportata una citazione sui lavoratori del Web:Web Workers: creano thread reali?

Ciò consente l'utilizzo di thread con il passaggio di messaggi come meccanismo di coordinamento .

La domanda è - se si tratta di filiforme, filetto non vero quello che è un vantaggio (performance saggio) di utilizzare questa tecnologia?

Qualsiasi aiuto sarà apprezzato!

+0

La risposta accettata è fuorviante. Vedi la mia risposta. – slebetman

risposta

2

Sì, i web worker creano thread reali (o processi, le specifiche sono flessibili su questo). Secondo la specifica Web Workers, quando un lavoratore viene creato il primo passo è:

  1. Creare un ambiente di esecuzione parallela separato (cioè un filo separato o processo o costrutto equivalente), ed eseguire il resto della procedura in quel contesto.

    Ai fini della temporizzazione delle API, questo è il momento ufficiale di creazione del lavoratore.

(specifica W3C Web Workers sezione 4,4)

quindi è esplicitamente specificato che il codice in esecuzione in Lavoratori Web eseguito in thread o processi reali.

Sebbene sia possibile implementare Workers senza thread (si noti il ​​linguaggio "construct equivalente") per l'utilizzo su sistemi che non supportano thread, tutte le implementazioni del browser implementano Web Workers come thread.

1

Secondo MDN,

lavoratori Web sono un meccanismo per cui un'operazione di script può essere fatto funzionare in un thread sfondo separato dalla principale thread di esecuzione di un'applicazione web. Il vantaggio di questo è che un'elaborazione laboriosa può essere eseguita in un thread separato, consentendo al thread principale (in genere all'interfaccia utente) di essere eseguito senza essere bloccato/rallentato.

Quindi, ogni worker non crea un thread separato, ma tutti i worker sono in esecuzione in un singolo thread separato.

Immagino, come solo in altre cose, l'implementazione e l'approccio possono differire da browser a browser.

+0

Quindi, i web worker creano thread reali? – andrey

+1

@andrey Sembra che non lo facciano. –

+1

Penso che questa risposta sia solo una possibile interpretazione del contenuto di MDN. Non è chiaro * thread di sfondo separato dal thread di esecuzione principale * fa riferimento a thread per istanza di 'Worker' o thread per browser. Tuttavia entrambe le interpretazioni sono possibili. –

1

Un web worker viene eseguito in un singolo thread isolato dal thread principale, il modo in cui passano i messaggi è thread-like e funziona in modo diverso a seconda se si sta utilizzando dedicato (è possibile accedere solo dallo script che creato) o condiviso (accessibile da qualsiasi script all'interno dello stesso dominio tramite un oggetto Port).

MODIFICA: Risposta aggiornata per riflettere il mio commento di mesi fa. Mentre un web worker SINGLE viene eseguito in un thread isolato, ciò non significa che ogni worker aggiuntivo verrà eseguito nello stesso thread.

+0

Grazie! Questo "thread isolato singolo" è dedicato solo ai web worker? Separato dal thread dell'interfaccia utente? – andrey

+0

@Dontfeedthecode fa singolo thread isolato significa che c'è solo un thread per tutti i lavoratori? –

+0

@Dontfeedthecode Quindi l'utilizzo di più lavoratori non ha alcun vantaggio. –

Problemi correlati