본문 바로가기
프로그래밍/C#

오버헤드

by 뽀도 2024. 7. 31.

🖥️ 오버헤드(OverHead)

OverHead 는 시스템의 리소스를 소모하면서도 실제 작업의 주요 성능에 기여하지 않는 추가적인 비용이나 부하를 의미. 

컴퓨터 과학에서 오버헤드는 다양한 맥락에서 발생할 수 있음. 

 

요약 : 리소스를 소모하는 추가적인 비용이나 부하


 

오버헤드의 종류 

 

1. 함수 호출 오버헤드

- 함수 호출 시 스택 관리, 레지스터 저장 및 복원, 프로시저 호출 등의 추가적인 작업 때문에 발생하는 비용 

ex) 

- 스택 프레임 생성 및 제거 

: 함수 호출 시 현재 함수의 상태를 스택에 저장하고, 호출된 함수의 스택 프레임을 생성

: 함수가 종료되면 프레임 제거하고, 이전 함수의 상태를 복원 

 

- 파라미터 전달

: 함수 호출 시 인자들을 스택이나 레지스터를 통해 전달 

 

- 프로시저 호출 및 반환

: 함수 호출 명령어(`call`)와 반환 명령어(`ret`)의 실행 

 

2. 메모리 관리오버헤드

- 메모리할당 및 해제 과정에서 발생하는 비용. 예를 들어 가비지 컬렉션이 실행할 때 발생하는 오버헤드.

 

3. 멀티스레딩 오버헤드

- 스레드 간의 컨텍스트 스위칭, 동기화 메커니즘 ( 예: 뮤텍스, 세마포어) 사용시 발생하는 비용 .

 

4. 네트워크 오버헤드

- 네트워크 패킷의 헤더 정보, 패킷 재조립, 오류 검출 및 수정 과정에서 발생하는 추가적인 비용 

 

5. I/O 오버헤드

- 디스크 읽기/쓰기, 네트워크 I/O 등에서 데이티ㅓ 전송 과정에서 발생하는 추가적인 비용 

 

🛎️ 일반 호출

public int Multiply(int a, int b)
{
    return a * b;
}

public void Calculate()
{
    int result = 0;
    
    // 반복문 안에서 함수를 호출하므로써 함수호출 오버헤드 발생 가능성 있음. 
    for (int i = 0; i < 1000000; i++)
    {
        result += Multiply(i, i);
    }
    Console.WriteLine(result);
}

 

 

🛎️ 인라인 최적화

public void Calculate()
{
    int result = 0;
    for (int i = 0; i < 1000000; i++)
    {
        result += i * i; // 함수 호출 대신 직접 계산
    }
    Console.WriteLine(result);
}

// ↑ 함수 호출을 본문으로 대체함 

 

인라인 최적화를 통해 함수 호출에 따른 오버헤드 제거 가능. 

특히 루프 내에서 자주 호출되는 작은 함수에서 큰 성능 향상을 가져올 수 있음

 

 

🌟 오버헤드는 시스템 성능 최적화에 중요한 요소, 함수 호출, 메모리 관리, 멀티스레딩 등 다양한 측면에서 발생 할 수 있음. 다양한 최적화를 사용하여 전체 시스템 성능 향상해야함! 

 

반응형

댓글