이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 3162|회답: 1

[통신] .NET 내 JIT 컴파일과 AOT 컴파일 소개와 차이점

[링크 복사]
게시됨 2024. 2. 15. 오후 5:17:46 | | | |
용어

CLI: 공통 언어 인프라스트럭처는 .NET 프레임워크 하에서 언어 독립적이고 아키텍처 간 런타임을 정의하는 명세입니다. 따라서 우리는 다양한 컴퓨터 아키텍처에서 수정 없이 실행될 수 있는 다양한 고급 언어로 소프트웨어를 개발할 수 있습니다

CLR: 공통 언어 실행 시간(Common Language Runtime)입니다. 는 운영 환경이 언어 독립적이고 아키텍처 간 간편함을 보장하는 명세입니다

CTS: 공통 타입 시스템

CLS: 공통 언어 명세서

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

IL: Immediate Language Intermediate Language, Advanced Language Compiler는 고급 언어의 소스 코드를 중간 언어로 컴파일합니다.

JIT: Just In Time 컴파일러는 중간 언어를 컴퓨터가 이해할 수 있는 기계어로 컴파일하여 실행합니다

소스 코드는 C# 컴파일러(프로그램, DLL, 엑스 등)에 의해 IL로 컴파일됩니다. CLR은 이 IL들을 로드하고 JIT를 통해 기계어로 컴파일한 후 다음 그림과 같이 최종적으로 실행됩니다:



JIT(Just-in-Time 컴파일러)는 실시간으로 컴파일됩니다

Just in-Time 컴파일러(JIT)는 .NET의 공통 언어 런타임(CLR)의 일부이며, . .NET 프로그램, 어떤 .NET 프로그램이든 상관없이 .NET 프로그래밍 언어. 언어별 컴파일러는 소스 코드를 중간 언어로 변환합니다. 이 중간 언어는 Just in Time(JIT) 컴파일러를 통해 기계어로 변환됩니다. 이 기계어는 JIT 컴파일러가 실행되는 컴퓨터 환경에 특화된 것입니다.  JIT 컴파일러 작업: JIT 컴파일러는 코드 실행 속도를 높이고 여러 플랫폼에 대한 지원을 제공해야 합니다. 작동 방식은 다음과 같습니다:



JIT 컴파일러는 Microsoft Intermediate Language(MSIL) 또는 Common Intermediate Language(CIL)를 기계어로 변환합니다. 이는 MSIL이나 CIL을 수행하기 전에 수행됩니다. MSIL은 필요에 따라 기계어로 변환되며, 즉 JIT 컴파일러가 전체 코드를 컴파일하는 대신 필요에 따라 MSIL 또는 CIL을 컴파일합니다. 컴파일된 MSIL 또는 CIL을 저장하여 필요시 후속 호출에 사용할 수 있도록 합니다.

JIT 장점:

  • 현재 하드웨어 상황에 따라 실시간으로 컴파일되고 생성할 수 있습니다
  • 최적의 기계 명령어 시퀀스는 현재 프로그램 연산에 따라 생성할 수 있습니다
  • 프로그램이 동적 링크를 지원해야 할 때는 JIT 컴파일 방법만 사용할 수 있습니다
  • 코드는 프로세스 내 실제 메모리 상황에 따라 조정하여 메모리를 더 효율적으로 활용할 수 있습니다


JIT 단점:

  • 컴파일은 런타임 런타임의 자원을 필요로 하며, 이로 인해 실행 시 프로세스가 끊김을 유발합니다
  • 컴파일은 실행 시간을 차지하며, 일부 코드 컴파일 최적화는 완전히 지원되지 않으므로 유창성과 시간의 균형을 맞춰야 합니다
  • 컴파일 준비와 자주 사용되는 방법의 식별은 시간이 많이 소요되며, 초기 컴파일 시 최고 성능을 내지 못합니다


AOT(Ahead-of-time 컴파일러)는 미리 컴파일됩니다

컴퓨터 과학에서 초기 컴파일(AOT 컴파일)은 보통 고수준 프로그래밍 언어를 (보통) 저수준 언어로 컴파일한 후, 보통 빌드 시점에 실행하여 런타임에 수행해야 하는 노력을 줄이는 행위입니다.

대부분의 경우, 이는 C나 C++와 같은 고급 프로그래밍 언어나 Java 바이트코드 같은 중간 표현을 결합하는 것과는 다릅니다. NET 프레임워크 공통 중간 언어(CIL) 코드)를 네이티브(시스템 의존적) 동작 관련으로 컴파일한 것입니다. 기계 코드로 만들어져서 결과 바이너리가 표준 네이티브 컴파일러처럼 네이티브로 실행할 수 있습니다. 이 특정 환경에서 사용될 때, 이는 종종 적시(JIT) 컴파일과 정반대로 여겨집니다.

AOT 컴파일은 프로그램이 컴파일되거나 설치되기 전에 이루어지며, 즉 스크립트나 바이트코드를 기계어로 미리 컴파일하고 필요할 때 직접 실행합니다. 이로 인해 프로그램 시작 속도가 향상되고 컴파일 과정에서 발생하는 지연을 방지할 수 있습니다.

AOT 장점:

  • 프로그램이 실행되기 전에 컴파일하면 컴파일 성능과 실행 시 메모리 소모를 피할 수 있습니다
  • 프로그램 초기에 최고의 성과를 달성할 수 있습니다
  • 프로그램 실행 속도를 크게 높일 수 있습니다


AOT 단점:

  • 프로그램 실행 전에 컴파일하면 설치 시간이 더 길어집니다
  • 사전 컴파일된 콘텐츠를 저장하면 더 많은 메모리가 소요됩니다
  • 고수준 언어의 일관성을 희생하는 것


요약

JIT: 높은 처리량, 런타임 성능 보너스, 더 빠르게 실행되고 동적으로 코드를 생성할 수 있지만, 시작 속도가 비교적 느리고 JIT 계층화 메커니즘을 트리거하려면 일정 시간과 호출 빈도가 필요합니다
AOT: 낮은 메모리 사용량, 빠른 시작 속도, 런타임 없이 최종 프로그램과 정적으로 연결될 수 있지만, 런타임 성능 보너스는 없고 프로그램 실행에 따라 추가 최적화가 불가능합니다



참조:

하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.





이전의:.NET/C# 고성능 기능은 여러 파일을 하나의 파일로 병합합니다
다음:.NET/C# 컬렉션 리스트, HashSet을 통해 요소가 벤치마크를 가지고 있는지 판단합니다
 집주인| 게시됨 2024. 3. 10. 오전 10:58:59 |
.NET/C# 로슬린 컴파일러 플랫폼
https://www.itsvse.com/thread-10740-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com