Par JavaScript, vous semblez vouloir dire ECMAScript.
Il y a déjà du multithreading dans le navigateur, construit avec webworkers et repose sur une forte isolation des données : les travailleurs ne communiquent que par messages, rien n'est partagé.
Si vous souhaitez un multithreading plus complexe, avec partage des données, cela ne semble pas possible pour le moment. Rien dans ECMAScript n'interdit explicitement le multithreading, mais vous ne pouvez pas faire du multithreading sans
- la possibilité de créer des "threads" (au sens général, il pourrait s'agir de coroutines)
- les mutex et les moyens de synchroniser les accès
- un support de bas niveau pour garantir, par exemple, qu'un changement de propriété ne casse pas les données en cas d'accès simultanés. Aucun des moteurs actuels n'a été conçu avec ce genre de force (oui, certains d'entre eux supportent plusieurs threads mais de manière isolée).
Le fait que l'ECMAScript n'ait pas été conçu pour inclure le multithreading est suffisant pour empêcher, à l'heure actuelle, de le prendre en charge (à l'exception du multithreading isolé par le passage de messages, comme cela se fait déjà, mais c'est un type de multithreading très limité).
Vous devez réaliser que
- le partage des données en multithreading est très coûteux (sans même parler des actions simultanées sur le DOM)
- vous l'utiliserez rarement en JavaScript
Pourquoi ai-je dit que vous l'utiliseriez rarement ? Parce que la plupart des tâches bloquantes d'entrée/sortie (lecture de fichiers, requêtes, requêtes de base de données, etc.), la plupart des tâches de bas niveau (par exemple, le décodage d'images ou le rendu de pages), la plupart de la gestion de l'interface utilisateur (avec la file d'attente des événements), la plupart de la planification (délais et intervalles) sont effectuées à l'extérieur.