Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 3162|Antwoord: 1

[Communicatie] Introductie en verschil tussen JIT- en AOT-compilatie in .NET

[Link kopiëren]
Geplaatst op 15-02-2024 17:17:46 | | | |
Terminologie

CLI: Common Language Infrastructure is een specificatie onder het .NET-framework die een taal-agnostische, cross-architecture runtime definieert. Daarom kunnen we software ontwikkelen in verschillende hoog-niveau talen onder de specificatie die zonder aanpassing in verschillende computerarchitecturen kan draaien

CLR: Common Language Runtime. is een specificatie die ervoor zorgt dat de operationele omgeving taalonafhankelijk en cross-architectural is

CTS: Common Type System

CLS: Common Language Specificatie

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

IL: Immediate Language Intermediate Language, Advanced Language Compiler compileert de broncode van geavanceerde talen tot tussenliggende talen.

JIT: Just In Time Compiler compileert een intermediaire taal tot machinecode die een computer kan begrijpen, die vervolgens kan worden uitgevoerd

Broncode wordt gecompileerd naar IL door een C# Compiler (d.w.z. programma's, dll's, ex'en, enz.). De CLR laadt deze IL's, compileert ze in machinecode via JIT en wordt uiteindelijk uitgevoerd, zoals weergegeven in de volgende figuur:



JIT (Just-in-time compiler) wordt direct gecompileerd

De just-in-time compiler (JIT) maakt deel uit van de Common Language Runtime (CLR) in .NET en is verantwoordelijk voor het beheren van de . .NET-programma, ongeacht elk . .NET programmeertaal. Taalspecifieke compilers converteren broncode naar tussenliggende talen. Deze tussenliggende taal wordt vervolgens omgezet in machinecode door een just-in-time (JIT) compiler. Deze machinecode is specifiek voor de computeromgeving waarin de JIT-compiler draait.  JIT-compilerwerk: JIT-compilers moeten de code-uitvoering versnellen en ondersteuning bieden voor meerdere platforms. Zo werkt het:



De JIT-compiler zet Microsoft Intermediate Language (MSIL) of Common Intermediate Language (CIL) om in machinecode. Dit gebeurt voordat MSIL of CIL wordt uitgevoerd. MSIL wordt indien nodig omgezet naar machinecode, d.w.z. de JIT-compiler compileert MSIL of CIL indien nodig, in plaats van de volledige code te compileren. Sla de gecompileerde MSIL of CIL op zodat deze gebruikt kan worden voor volgende oproepen indien nodig.

JIT Voordele:

  • Het kan in realtime worden gecompileerd en gegenereerd afhankelijk van de huidige hardwaresituatie
  • De optimale machine-instructievolgorde kan worden gegenereerd volgens de huidige programmabewerking
  • Wanneer een programma dynamisch koppelen moet ondersteunen, kan het alleen de JIT-compilatiemethode gebruiken
  • De code kan worden aangepast aan de werkelijke situatie van het geheugen in het proces om het geheugen beter te benutten


JIT Nadelen:

  • Compileren vereist de resources van de runtime runtime, waardoor het proces stottert bij het uitvoeren
  • Compilatie kost looptijd, en sommige codecompilatieoptimalisaties kunnen niet volledig worden ondersteund, dus het is noodzakelijk om vloeiendheid en tijd in balans te brengen
  • Compilatievoorbereiding en identificatie van vaak gebruikte methoden kost veel tijd, en de initiële compilatie levert niet de hoogste prestaties


AOT (Ahead-of-time compiler) wordt vooraf gecompileerd

In de informatica is vroege compilatie (AOT-compilatie) het compileren van een (meestal) hoog-niveau programmeertaal in een (meestal) laag-niveau taal voordat een programma wordt uitgevoerd, meestal tijdens het bouwproces, om de hoeveelheid inspanning die tijdens runtime moet worden verricht te verminderen.

Meestal is het niet hetzelfde als het combineren van hoog-niveau programmeertalen (zoals C of C++) of tussenrepresentaties zoals Java bytecode of . NET Framework Common Intermediate Language (CIL) code) gecompileerd om native (systeemafhankelijk) gedragsgerelateerd te zijn. machinecode zodat de resulterende binaries native kunnen worden uitgevoerd, net als een standaard native compiler. Wanneer het in deze specifieke omgeving wordt gebruikt, wordt het vaak gezien als het tegenovergestelde van just-in-time (JIT) compilatie.

AOT-compilatie vindt plaats voordat het programma is gecompileerd of geïnstalleerd, dat wil zeggen, het precompileert scripts of bytecodes in machinecode en voert deze direct uit wanneer dat nodig is. Dit kan de opstartsnelheid van het programma verbeteren en vertragingen door het compilatieproces voorkomen.

AOT Voordele:

  • Compileren voordat het programma draait, voorkomt compilatieprestaties en geheugenverbruik tijdens runtime
  • Piekprestaties kunnen vroeg in het programma worden bereikt
  • Het kan de efficiëntie van de programma-uitvoering aanzienlijk versnellen


AOT Nadelen:

  • Compileren voordat het programma draait verlengt de tijd die nodig is om het programma te installeren
  • Het opslaan van vooraf gecompileerde inhoud kost meer geheugen
  • Het opofferen van de consistentie van hoog-niveau talen


samenvatting

JIT: Hoge doorvoersnelheid, runtime-prestatiebonus, kan sneller draaien en kan dynamisch code genereren, enzovoort, maar het is relatief traag om op te starten en vereist een bepaalde hoeveelheid tijd en frequentie van oproepen om het JIT-layeringmechanisme te activeren
AOT: Laag geheugengebruik, snelle opstartsnelheid, kan de runtime statisch direct koppelen aan het uiteindelijke programma zonder runtime, maar er is geen runtime-prestatiebonus en het kan niet verder worden geoptimaliseerd afhankelijk van het uitvoeren van het programma



Referentie:

De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.





Vorig:.NET/C# Hoge prestaties voegen meerdere bestanden samen tot één bestand
Volgend:.NET/C# verzamelingslijst, HashSet om te bepalen of een element een benchmark heeft
 Huisbaas| Geplaatst op 10-03-2024 10:58:59 |
.NET/C# Roslyn compilerplatform
https://www.itsvse.com/thread-10740-1-1.html
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com