Ich habe gelesen, dass die V8-Javascript-Engine ein Just-in-Time-Compiler ist. Und das PyPy ist ein Python-Interpreter, der auch ein Just-in-Time-Compiler ist. PyPy ist dafür bekannt, dass es eine GIL bei mehreren Threads gibt.
Hat die V8-Javascript-Engine etwas mit einer globalen Interpreter-Sperre (GIL) zu tun, um mit Web-Worker-Threads umzugehen?
Und haben alle dynamischen Sprachen Probleme beim Umgang mit Multicore und wenn ja, warum haben die JIT-Compiler Probleme mit einer GIL?
Chromium Web Workers werden zusätzlich zu V8 Isolates implementiert. Jedes Isolate ist im Wesentlichen eine vollständig unabhängige Instanz von V8 VM. Viele Isolate können in demselben Prozess koexistieren und JavaScript-Code gleichzeitig ausführen.
Jedes Isolate kann jedoch immer nur zu einem bestimmten Zeitpunkt im Besitz eines einzigen Threads sein. Es gibt einen Sperrmechanismus auf Isolate-Ebene, den einbetten muss , um den exklusiven Zugriff auf ein Isolate sicherzustellen.
Um Ihre letzte Frage zu beantworten, glaube ich nicht, dass GILs etwas sein müssen, das unbedingt in dynamisch interpretierten oder JIT-kompilierten Sprachen vorhanden sein muss. Zum Beispiel hat PyPy einige vorbereitende Arbeiten zur Beseitigung der GIL unter Verwendung von Softwaretransaktionsspeicher durchgeführt. Die Tatsache, dass PyPy und CPython GILs haben, hat mehr mit den Designentscheidungen zu tun, die früher in ihren Historien gemacht wurden, und der Tatsache, dass ihre internen Datenstrukturen nicht threadsicher sind.
Tags und Links javascript v8