Brendan Eich ha espresso la sua opposizione al multi-threading in JavaScript più volte:
So my default answer to questions such as the one I got at last May’s Ajax Experience, “When will you add threads to JavaScript?” is: “over your dead body!” (source)
E prosegue elencando alcuni motivi per cui.
Non è solo il DOM che non è thread-safe, il linguaggio stesso non si presta a un aggraziato multithreading. Uno dei grandi problemi che affliggono JavaScript è il sistema di tipo altamente flessibile e dinamico. Poiché quasi tutto può essere modificato e ridefinito in fase di esecuzione, cosa succede quando il programmatore modifica il corpo del metodo Object.prototype.toString
mentre un altro thread sta effettivamente chiamando Object.prototype.toString
? O più in generale, qualsiasi metodo? L'unico modo sicuro per gestirli sarebbe sincronizzare qualsiasi operazione che modifichi qualsiasi metodo su qualsiasi oggetto - poiché questo è un compito abbastanza comune in JavaScript, in pratica si ripristinerebbe di nuovo in un linguaggio a thread singolo.
I lavoratori Web sono in grado di aggirare questo problema assicurandosi che gli script di lavoro non condividano lo stesso spazio di memoria del thread principale, quindi la modifica degli oggetti nel lavoro non può interrompere o alterare l'operazione del thread principale.