“오버 헤드”란 무엇입니까?


149

저는 컴퓨터 공학 학생이며 프로그램과 분류에있어 "오버 헤드"라는 단어를 많이 듣고 있습니다. 이것이 정확히 무엇을 의미합니까?


27
무언가를 얻기 위해해야 ​​할 "추가 물건"의 양 예를 들어 "Hello World"를 인쇄하기 위해 37 개의 클래스 프로젝트를로드해야하는 경우에는 많은 오버 헤드를 고려해야합니다.
scunliffe

1
사실 그것은 다른 방향입니다. =)
후쿠자와 유키오

답변:


177

작업을 설정하는 데 필요한 리소스입니다. 관련이 없지만 필요할 수 있습니다.

어딘가에 가야 할 때처럼 자동차가 필요할 수도 있습니다. 그러나 길을 따라 자동차를 운전하는 것은 많은 오버 헤드가 있으므로 걷기를 원할 수 있습니다. 그러나 전국을 가로 질러 가면 오버 헤드가 가치가 있습니다.

컴퓨터 과학에서, 우리는 더 좋은 길을 가지지 못하거나 "걷는 법을 배우는"시간이 없기 때문에 때때로 자동차를 사용하여 길을 내려갑니다.


84
비슷한 비유가 날 것입니다. 비행기는 자동차보다 훨씬 빠르지 만 공항 체크인, 보안 등의 오버 헤드로 인해 짧은 거리의 자동차가 더 나은 옵션입니다.
FogleBird

s / drive / go / ( 어딘가 로 운전할 필요가 있다면 보통 걷기로 결정하지 않습니다 ...
RCIX

1
@ inf3rno 아이러니? 차에 어떻게가요? 우리는 걷습니다. 그리고 우리는 우리 차까지 완전히 걸을 수 있습니다. 우리 차보다 가까워도 목적지까지 걸어 갈 수 없습니다.
corsiKa

오버 헤드가 적은 Java 코드를 작성한다고하면 "작업을 설정하는 데 필요한 리소스"의 정의와 관련하여 어떻게 해석 할 수 있습니까? 내 코드에는 많은 설정이 필요하지 않습니까?
committedandroider

글쎄, 당신은 컴퓨터 또는 서버를 켜고, 운영 체제와 모든 드라이버를로드하고, Java 프로세스를 시작해야하고, JVM을 켜야하며, 모든 클래스를로드해야합니다. "hello world"를 수행 할 수 있도록 IO 버퍼를 콘솔에 동기화해야합니다. 그러나 낮은 오버 헤드 코딩에 대해 더 알려주십시오.
corsiKa

40

단어의 의미는 상황에 따라 다를 수 있습니다. 일반적으로 사용되는 리소스 (대부분 메모리 및 CPU 시간)는 의도 된 결과에 직접 기여하지 않지만 사용중인 기술 또는 방법에 필요합니다. 예 :

  • 프로토콜 오버 헤드 : 이더넷 프레임, IP 패킷 및 TCP 세그먼트에는 모두 헤더가 있으며 TCP 연결에는 핸드 셰이크 패킷이 필요합니다. 따라서 하드웨어가 실제 데이터에 대해 가능한 전체 대역폭을 사용할 수 없습니다. 더 큰 패킷 크기를 사용하여 오버 헤드를 줄일 수 있으며 UDP에는 더 작은 헤더와 핸드 셰이크가 없습니다.
  • 데이터 구조 메모리 오버 헤드 : 링크 된 목록에는 포함 된 각 요소에 대해 하나 이상의 포인터가 필요합니다. 요소의 크기가 포인터와 같으면 메모리 오버 헤드가 50 % 인 반면 배열의 오버 헤드는 0 % 일 수 있습니다.
  • 메소드 호출 오버 헤드 : 잘 설계된 프로그램은 많은 짧은 메소드로 분류됩니다. 그러나 각 메소드 호출에는 스택 프레임 설정, 매개 변수 복사 및 리턴 주소가 필요합니다. 이는 단일 모 놀리 식 기능으로 모든 것을 수행하는 프로그램과 비교하여 CPU 오버 헤드를 나타냅니다. 물론 추가 된 유지 관리 기능은 그 가치가 매우 높지만 경우에 따라 과도한 메서드 호출은 성능에 큰 영향을 줄 수 있습니다.

단어와 같은 소리는 모든 예에서 동일한 의미를 갖습니다 (작업을 수행해야하지만 항상 직접 수행하는 것과 관련이 없음)
RCIX

데이터 구조 메모리 오버 헤드 재조정 : 대부분의 메모리 할당자는 그보다 더 나쁩니다. malloc블록 크기와 가드 값으로 구성된 할당 자 (클래식 32 비트 시스템 가정)로 인해 반환 된 각 값 에는 8 바이트의 내장 오버 헤드가 있습니다. 그리고 그 전에 할당 세분성에 대해 생각하기도합니다. 따라서 단순 4 ​​바이트 정수의 단일 링크 목록은 오버 헤드가 75 %입니다. 배열은 오버 헤드가 한 번 (또는 배열이 동적으로 할당되지 않은 경우) 더 줄어들 수 있기 때문에 (중간에 빠른 삽입이 필요하지 않은 한) 훨씬 좋습니다.
Donal Fellows

19

당신은 피곤하고 더 이상 일을 할 수 없습니다. 당신은 음식을 먹는다. 에너지는 음식을 찾고, 음식을 섭취하고 실제로 먹는 데 소비 한 에너지는 에너지를 소비하고 오버 헤드입니다!

오버 헤드는 작업을 수행하기 위해 낭비되는 것입니다. 목표는 오버 헤드를 매우 작게 만드는 것입니다.

컴퓨터 과학에서는 숫자를 인쇄하고 싶다고 말합니다. 그러나 번호를 저장하고 인쇄 할 디스플레이를 설정하고 인쇄 할 루틴을 호출 한 다음 변수에서 번호에 액세스하는 것은 모두 오버 헤드입니다.


17

Wikipedia 는 우리에게 다음을 다뤘습니다 .

컴퓨터 과학에서 오버 헤드 는 일반적으로 초과 또는 간접 계산 시간, 메모리, 대역폭 또는 특정 목표를 달성하는 데 필요한 기타 리소스의 조합으로 간주됩니다. 엔지니어링 오버 헤드의 특별한 경우입니다.


4
그러나 그렇지 않은 경우 WikiPedia를 수정 한 다음 여기에서 동일한 게시물을 작성하십시오.
SamGoody

11

오버 헤드는 일반적으로 다른 프로그래밍 알고리즘이 사용하는 추가 리소스 (메모리, 프로세서, 시간 등)의 양을 나타냅니다.

예를 들어, 균형 이진 트리에 삽입하는 오버 헤드는 단순한 링크 된 목록에 동일한 삽입보다 훨씬 클 수 있습니다 (삽입 시간이 오래 걸리고 더 많은 처리 능력을 사용하여 트리 균형을 조정하므로 작업 시간이 길어집니다. 사용자).


5

프로그래머의 오버 헤드는 주어진 입력 데이터 세트에서 제공 플랫폼에서 실행될 때 코드에서 소비하는 시스템 리소스를 말합니다. 일반적으로이 용어는 다른 구현 또는 가능한 구현을 비교하는 맥락에서 사용됩니다.

예를 들어, 특정 접근 방식은 상당한 CPU 오버 헤드를 유발할 수 있지만 다른 접근 방식은 더 많은 메모리 오버 헤드를 유발할 수 있지만 다른 접근 방식은 네트워크 오버 헤드에 가중 될 수 있습니다 (예 : 외부 종속성).

구체적인 예를 들어 보겠습니다. 숫자 집합의 평균 (산술 평균)을 계산합니다.

명백한 접근 방식은 누적 합계와 개수를 유지하면서 입력을 반복하는 것입니다. 마지막 숫자에 도달하면 ( "파일 끝"EOF, 일부 센티넬 값 또는 일부 GUI 버튼으로 표시됨) 총계를 입력 수로 나누면됩니다.

이 방식은 CPU, 메모리 또는 기타 리소스 측면에서 거의 오버 헤드가 발생하지 않습니다. (사소한 작업입니다).

또 다른 가능한 방법은 입력을 목록에 "느슨하게"하는 것입니다. 목록을 반복하여 합계를 계산 한 다음 목록에서 유효한 항목 수로 나눕니다.

이에 비해이 방법은 임의의 양의 메모리 오버 헤드가 발생할 수 있습니다.

특히 나쁜 구현에서는 재귀를 사용하지만 꼬리 제거없이 합 연산을 수행 할 수 있습니다. 이제 목록에 대한 메모리 오버 헤드 외에도 스택 오버 헤드 (다른 종류의 메모리이며 다른 형태의 메모리보다 더 제한적인 리소스)가 도입되었습니다.

또 다른 (아마도 더 터무니없는) 접근법은 모든 입력을 RDBMS의 일부 SQL 테이블에 게시하는 것입니다. 그런 다음 해당 테이블의 해당 열에서 SQL SUM 함수를 호출하면됩니다. 이로 인해 로컬 메모리 오버 헤드가 다른 서버로 이동하고 실행에 네트워크 오버 헤드 및 외부 종속성이 발생합니다. (원격 서버는이 작업과 관련된 특정 메모리 오버 헤드를 갖거나 갖지 않을 수 있습니다. 예를 들어, 모든 값을 즉시 스토리지에 전달할 수 있습니다).

가설 적으로 어떤 종류의 클러스터에 대한 구현을 고려할 수 있습니다 (수조의 값을 평균화하는 것이 가능할 수 있음). 이 경우 필요한 값 인코딩 및 배포 (노드로 매핑) 및 결과 수집 / 축소 (축소)가 오버 헤드로 계산됩니다.

또한 프로그래머 자신의 코드 이외의 요소로 인해 발생하는 오버 헤드에 대해서도 이야기 할 수 있습니다. 예를 들어 32 비트 또는 64 비트 프로세서에 대한 일부 코드 컴파일은 기존 8 비트 또는 16 비트 아키텍처보다 더 많은 오버 헤드를 수반 할 수 있습니다. 여기에는 더 큰 메모리 오버 헤드 (정렬 문제) 또는 CPU 오버 헤드 (CPU가 비트 순서를 조정하거나 정렬되지 않은 명령어 사용 등) 또는 둘 다가 포함될 수 있습니다.

코드와 라이브러리 등에서 차지하는 디스크 공간은 일반적으로 "오버 헤드"라고하는 것이 아니라 "풋 프린트"라고합니다. 또한 프로그램이 처리하는 데이터 세트에 관계없이 프로그램이 사용하는 기본 메모리를 "풋 프린트"라고합니다.


3

오버 헤드는 단순히 프로그램 실행에서 더 많은 시간이 소요됩니다. 예 ; 함수를 호출하고 정의 된 곳에서 제어를 전달 한 다음 본문을 실행하면 CPU가 긴 프로세스를 통해 실행되도록합니다 (먼저 제어를 메모리의 다른 위치로 전달 한 다음 거기서 실행 한 다음) 컨트롤을 이전 위치로 다시 전달) 따라서 성능 시간이 많이 걸리므로 오버 헤드가 발생합니다. 우리의 목표는 함수 정의 및 호출 시간 동안 인라인을 사용하여 인라인을 사용 하여이 오버 헤드를 줄이는 것입니다.이 함수는 함수 호출시 함수의 내용을 복사하므로 제어를 다른 위치로 전달하지 않지만 프로그램을 한 줄로 계속 진행하므로 인라인 .


2

사전을 사용할 수 있습니다. 정의는 동일합니다. 그러나 시간을 절약하기 위해 오버 헤드는 생산적인 작업을 수행하는 데 필요한 작업입니다. 예를 들어, 알고리즘이 실행되고 유용한 작업을 수행하지만 작업을 수행하려면 메모리가 필요합니다. 이 메모리 할당에는 시간이 걸리며 수행중인 작업과 직접 관련이 없으므로 오버 헤드가 발생합니다.


1

Wikipedia 를 확인할 수 있습니다 . 그러나 주로 더 많은 행동이나 자원이 사용될 때. .NET에 익숙한 것처럼 값 유형과 참조 유형을 가질 수 있습니다. 참조 유형은 값 유형보다 더 많은 메모리가 필요하므로 메모리 오버 헤드가 있습니다.


1

오버 헤드의 구체적인 예는 "로컬"프로 시저 호출과 "원격"프로 시저 호출의 차이입니다.

예를 들어, 고전적인 RPC (및 EJB와 같은 다른 많은 원격 프레임 워크)에서 함수 또는 메소드 호출은 로컬, 메모리 호출 또는 분산 네트워크 호출 여부와 상관없이 코더와 동일하게 보입니다.

예를 들면 다음과 같습니다.

service.function(param1, param2);

이것이 정상적인 방법입니까, 아니면 원격 방법입니까? 당신이 여기에서 무엇을 볼 수 없습니다.

그러나 두 호출 간의 실행 시간 차이가 극적이라고 상상할 수 있습니다.

따라서 핵심 구현은 "동일한 비용"이 소요되지만 관련된 "오버 헤드"는 상당히 다릅니다.


1

스레드를 관리하고 스레드간에 조정하는 데 필요한 시간으로 오버 헤드를 생각하십시오. 스레드에 수행 할 작업이 충분하지 않으면 부담이됩니다. 이 경우 스레딩을 사용하여 오버 헤드 비용이 절약되고 코드가 순차적 인 것보다 시간이 오래 걸립니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.