Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 3162|Antwort: 1

[Kommunikation] Einführung und Unterschied zwischen JIT- und AOT-Kompilierung in .NET

[Link kopieren]
Veröffentlicht am 15.02.2024 17:17:46 | | | |
Terminologie

CLI: Common Language Infrastructure ist eine Spezifikation im .NET-Framework, die eine sprachunabhängige, architekturübergreifende Laufzeitumgebung definiert. Daher können wir Software in verschiedenen hochstufigen Sprachen unter der Spezifikation entwickeln, die in unterschiedlichen Computerarchitekturen ohne Modifikation ausgeführt werden können

CLR: Common Language Runtime. ist eine Spezifikation, die sicherstellt, dass die Betriebsumgebung sprachunabhängig und architekturübergreifend ist

CTS: Common Type System

CLS: Common Language Specification

FCL: Framework Class Library 架构类库,包含两部分: 基础类库 Base Class  Library 和成品类库

IL: Immediate Language Intermediate Language, Advanced Language Compiler kompiliert den Quellcode fortgeschrittener Sprachen in Zwischensprachen.

JIT: Just In Time Compiler kompiliert eine Zwischensprache zu Maschinencode, den ein Computer verstehen kann, der dann ausgeführt werden kann

Der Quellcode wird von einem C#-Compiler in IL kompiliert (d. h. Programme, DLLs, Exes usw.). Der CLR lädt diese ILs, kompiliert sie über JIT in Maschinencode und wird schließlich ausgeführt, wie in der folgenden Abbildung gezeigt:



JIT (Just-in-time-Compiler) wird on-the-fly kompiliert

Der Just-in-Time-Compiler (JIT) ist Teil der Common Language Runtime (CLR) in .NET und verantwortlich für die Verwaltung der . .NET-Programm, unabhängig von beliebigen . .NET-Programmiersprache. Sprachspezifische Compiler konvertieren Quellcode in Zwischensprachen. Diese Zwischensprache wird dann von einem Just-in-Time-(JIT)-Compiler in Maschinencode umgewandelt. Dieser Maschinencode ist spezifisch für die Computerumgebung, in der der JIT-Compiler läuft.  JIT-Compiler-Arbeit: JIT-Compiler müssen die Codeausführung beschleunigen und Unterstützung für mehrere Plattformen bieten. So funktioniert es:



Der JIT-Compiler wandelt Microsoft Intermediate Language (MSIL) oder Common Intermediate Language (CIL) in Maschinencode um. Dies geschieht vor der Durchführung von MSIL oder CIL. MSIL wird bei Bedarf in Maschinencode umgewandelt, d. h. der JIT-Compiler kompiliert MSIL oder CIL nach Bedarf, anstatt den gesamten Code zu kompilieren. Speichere das kompilierte MSIL oder CIL, damit es bei Bedarf für weitere Aufrufe verwendet werden kann.

JIT-Vorteile:

  • Sie kann in Echtzeit entsprechend der aktuellen Hardwaresituation kompiliert und generiert werden
  • Die optimale Maschinenbefehlssequenz kann gemäß der aktuellen Programmoperation generiert werden
  • Wenn ein Programm dynamische Verlinkung unterstützen muss, kann es nur die JIT-Kompilierungsmethode verwenden
  • Der Code kann je nach aktueller Speichersituation im Prozess angepasst werden, um den Speicher besser zu nutzen


JIT-Nachteile:

  • Das Kompilieren benötigt die Ressourcen der Laufzeitlaufzeit, was dazu führt, dass der Prozess beim Ausführen ruckelt
  • Kompilierung beansprucht Laufzeit, und einige Code-Kompilierungsoptimierungen können nicht vollständig unterstützt werden, daher ist es notwendig, Flüssigkeit und Zeit auszubalancieren
  • Kompilierungsvorbereitung und Identifikation häufig verwendeter Methoden sind zeitaufwendig, und die anfängliche Kompilierung erzielt nicht die höchste Leistung


AOT (Ahead-of-time Compiler) wird im Voraus kompiliert

In der Informatik bezeichnet frühe Kompilierung (AOT-Kompilierung) die Handlung, eine (meist) hochstufige Programmiersprache in eine (meist) niedrigstufige Sprache zu kompilieren, bevor ein Programm ausgeführt wird, meist zur Build-Zeit, um den Aufwand zur Laufzeit zu verringern.

Meistens ist es nicht dasselbe wie die Kombination von hochstufigen Programmiersprachen (wie C oder C++) oder Zwischenrepräsentationen wie Java, Bytecode oder . NET Framework Common Intermediate Language (CIL)-Code) kompiliert, um native (systemabhängig) verhaltensbezogen zu sein. Maschinencode, sodass die resultierenden Binärdateien nativ ausgeführt werden können, genau wie bei einem standardmäßigen nativen Compiler. In dieser speziellen Umgebung wird es oft als das Gegenteil der Just-in-Time-(JIT)-Kompilierung angesehen.

Die AOT-Kompilierung findet statt, bevor das Programm kompiliert oder installiert wird, das heißt, es prekompiliert Skripte oder Bytecodes in Maschinencode und führt sie bei Bedarf direkt aus. Dies kann die Startgeschwindigkeit des Programms verbessern und Verzögerungen durch den Kompilierungsprozess vermeiden.

AOT-Vorteile:

  • Das Kompilieren vor dem Programmstart vermeidet die Kompilierungsleistung und den Speicherverbrauch zur Laufzeit
  • Maximale Leistung kann früh im Programm erreicht werden
  • Es kann die Effizienz der Programmausführung erheblich beschleunigen


AOT-Nachteile:

  • Das Kompilieren vor dem Programmstart erhöht die Zeit, die für die Installation des Programms benötigt wird.
  • Das Speichern vorkompilierter Inhalte beansprucht mehr Speicher
  • Opferung der Konsistenz hochstufiger Sprachen


Zusammenfassung

JIT: Hoher Durchsatz, Laufzeit-Leistungsbonus, kann schneller laufen und kann dynamisch Code generieren usw., aber der Start ist relativ langsam und benötigt eine bestimmte Zeit und Ruffrequenz, um den JIT-Layering-Mechanismus auszulösen
AOT: Geringer Speicherverbrauch, schnelle Startgeschwindigkeit, kann die Laufzeit statisch direkt mit dem finalen Programm ohne Laufzeit verknüpft werden, aber es gibt keinen Leistungsbonus zur Laufzeit, und es kann nicht weiter optimiert werden, je nach Programmlaufzeit



Referenz:

Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.





Vorhergehend:.NET/C# Hochleistung führt mehrere Dateien zu einer einzigen Datei zusammen
Nächster:.NET/C# Collection List, HashSet, um zu bestimmen, ob ein Element einen Benchmark hat
 Vermieter| Veröffentlicht am 10.03.2024 10:58:59 |
.NET/C# Roslyn-Compiler-Plattform
https://www.itsvse.com/thread-10740-1-1.html
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com