🖥️ 오버헤드(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);
}
// ↑ 함수 호출을 본문으로 대체함
인라인 최적화를 통해 함수 호출에 따른 오버헤드 제거 가능.
특히 루프 내에서 자주 호출되는 작은 함수에서 큰 성능 향상을 가져올 수 있음
🌟 오버헤드는 시스템 성능 최적화에 중요한 요소, 함수 호출, 메모리 관리, 멀티스레딩 등 다양한 측면에서 발생 할 수 있음. 다양한 최적화를 사용하여 전체 시스템 성능 향상해야함!
'프로그래밍 > C#' 카테고리의 다른 글
MemoryPack 라이브러리 (0) | 2024.08.07 |
---|---|
[C#] Global Using (0) | 2024.08.05 |
비동기에서[async/await] lock 사용하기 (0) | 2024.07.11 |
[.net] nullable reference types 관련 경고 처리 (0) | 2024.07.09 |
AddDbContextPool 과 AddPooledDbContextFactory (0) | 2024.07.01 |
댓글