개념 : 오버헤드(overhead)는 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리, 리소스등을 말하며 컴퓨터 성능에 부정적인 영향을 미치는 요소이다.
<오버헤드의 종류>
1. 파싱 오버헤드(Parsing Overhead):
파싱 오버헤드는 주로 데이터를 읽거나 해석하는 과정에서 발생합니다. 특히 텍스트 데이터를 구문 분석하여 프로그램이 이해할 수 있는 형식으로 변환할 때 많이 발생합니다.
*예시: 웹 서버가 클라이언트로부터 받은 HTTP 요청을 파싱하여 요청된 리소스를 식별하고 처리하는 작업.
2. 메모리 오버헤드(Memory Overhead):
메모리 오버헤드는 프로그램이 실행될 때 메모리를 소비하는 부가적인 부분을 나타냅니다. 이로 인해 시스템 자원이 낭비될 수 있습니다.
*예시: 객체 지향 언어에서 클래스의 인스턴스를 생성할 때 발생하는 메모리 오버헤드. 각 인스턴스마다 메서드 테이블이나 가상 함수 테이블과 같은 추가 데이터를 유지하기 위해 메모리를 소비할 수 있습니다.
3. 시간 오버헤드(Time Overhead):
시간 오버헤드는 어떤 작업을 수행하는 데 소요되는 추가 시간을 의미합니다. 이로 인해 프로그램의 실행 시간이 늘어나거나 성능이 저하될 수 있습니다.
*예시: 스레드 동기화를 위한 뮤텍스 또는 세마포어를 사용할 때 발생하는 시간 오버헤드. 스레드 간의 상호 배제를 보장하기 위해 추가적인 동기화 작업을 수행해야 합니다.
<C#에서 발생할 수 있는 오버헤드 예시>
1. 가상함수 호출의 오버헤드 :
가상 함수는 실행 시간에 객체의 실제 타입을 확인하고 적절한 메서드를 찾아야 하기 때문임.
*예시 :
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Dog barks");
}
}
로 상속 관계에서 가상 함수 'MakeSound'를 찾는 과정(오버헤드 발생)이 생김.
2. Garbage Collection(GC) 오버헤드:
가비지 컬렉션이 정리할때 메모리 회수의 시간과 리소스를 소비함.
3. 비동기 프로그래밍의 오버헤드:
'async' 및 'await'를 사용하여 비동기 작업을 관리할 때 발생하는 추가적인 작업 때문에 오버헤드가 발생 할 수 있음.
특히 'await'의 경우 비동기 작업이 완료될 때까지 대기해야 하므로 오버헤드가 발생 할 수 있음.
'개발관련공부자료' 카테고리의 다른 글
C#의 빌드과정 (0) | 2023.10.06 |
---|---|
알고리즘 (0) | 2023.10.06 |
자료구조 (0) | 2023.10.05 |
기업의 CS 적성 정리 (0) | 2023.09.25 |
객체지향 프로그래밍 (0) | 2023.09.22 |