답변:
작업을 설정하는 데 필요한 리소스입니다. 관련이 없지만 필요할 수 있습니다.
어딘가에 가야 할 때처럼 자동차가 필요할 수도 있습니다. 그러나 길을 따라 자동차를 운전하는 것은 많은 오버 헤드가 있으므로 걷기를 원할 수 있습니다. 그러나 전국을 가로 질러 가면 오버 헤드가 가치가 있습니다.
컴퓨터 과학에서, 우리는 더 좋은 길을 가지지 못하거나 "걷는 법을 배우는"시간이 없기 때문에 때때로 자동차를 사용하여 길을 내려갑니다.
단어의 의미는 상황에 따라 다를 수 있습니다. 일반적으로 사용되는 리소스 (대부분 메모리 및 CPU 시간)는 의도 된 결과에 직접 기여하지 않지만 사용중인 기술 또는 방법에 필요합니다. 예 :
malloc
블록 크기와 가드 값으로 구성된 할당 자 (클래식 32 비트 시스템 가정)로 인해 반환 된 각 값 에는 8 바이트의 내장 오버 헤드가 있습니다. 그리고 그 전에 할당 세분성에 대해 생각하기도합니다. 따라서 단순 4 바이트 정수의 단일 링크 목록은 오버 헤드가 75 %입니다. 배열은 오버 헤드가 한 번 (또는 배열이 동적으로 할당되지 않은 경우) 더 줄어들 수 있기 때문에 (중간에 빠른 삽입이 필요하지 않은 한) 훨씬 좋습니다.
Wikipedia 는 우리에게 다음을 다뤘습니다 .
컴퓨터 과학에서 오버 헤드 는 일반적으로 초과 또는 간접 계산 시간, 메모리, 대역폭 또는 특정 목표를 달성하는 데 필요한 기타 리소스의 조합으로 간주됩니다. 엔지니어링 오버 헤드의 특별한 경우입니다.
프로그래머의 오버 헤드는 주어진 입력 데이터 세트에서 제공 플랫폼에서 실행될 때 코드에서 소비하는 시스템 리소스를 말합니다. 일반적으로이 용어는 다른 구현 또는 가능한 구현을 비교하는 맥락에서 사용됩니다.
예를 들어, 특정 접근 방식은 상당한 CPU 오버 헤드를 유발할 수 있지만 다른 접근 방식은 더 많은 메모리 오버 헤드를 유발할 수 있지만 다른 접근 방식은 네트워크 오버 헤드에 가중 될 수 있습니다 (예 : 외부 종속성).
구체적인 예를 들어 보겠습니다. 숫자 집합의 평균 (산술 평균)을 계산합니다.
명백한 접근 방식은 누적 합계와 개수를 유지하면서 입력을 반복하는 것입니다. 마지막 숫자에 도달하면 ( "파일 끝"EOF, 일부 센티넬 값 또는 일부 GUI 버튼으로 표시됨) 총계를 입력 수로 나누면됩니다.
이 방식은 CPU, 메모리 또는 기타 리소스 측면에서 거의 오버 헤드가 발생하지 않습니다. (사소한 작업입니다).
또 다른 가능한 방법은 입력을 목록에 "느슨하게"하는 것입니다. 목록을 반복하여 합계를 계산 한 다음 목록에서 유효한 항목 수로 나눕니다.
이에 비해이 방법은 임의의 양의 메모리 오버 헤드가 발생할 수 있습니다.
특히 나쁜 구현에서는 재귀를 사용하지만 꼬리 제거없이 합 연산을 수행 할 수 있습니다. 이제 목록에 대한 메모리 오버 헤드 외에도 스택 오버 헤드 (다른 종류의 메모리이며 다른 형태의 메모리보다 더 제한적인 리소스)가 도입되었습니다.
또 다른 (아마도 더 터무니없는) 접근법은 모든 입력을 RDBMS의 일부 SQL 테이블에 게시하는 것입니다. 그런 다음 해당 테이블의 해당 열에서 SQL SUM 함수를 호출하면됩니다. 이로 인해 로컬 메모리 오버 헤드가 다른 서버로 이동하고 실행에 네트워크 오버 헤드 및 외부 종속성이 발생합니다. (원격 서버는이 작업과 관련된 특정 메모리 오버 헤드를 갖거나 갖지 않을 수 있습니다. 예를 들어, 모든 값을 즉시 스토리지에 전달할 수 있습니다).
가설 적으로 어떤 종류의 클러스터에 대한 구현을 고려할 수 있습니다 (수조의 값을 평균화하는 것이 가능할 수 있음). 이 경우 필요한 값 인코딩 및 배포 (노드로 매핑) 및 결과 수집 / 축소 (축소)가 오버 헤드로 계산됩니다.
또한 프로그래머 자신의 코드 이외의 요소로 인해 발생하는 오버 헤드에 대해서도 이야기 할 수 있습니다. 예를 들어 32 비트 또는 64 비트 프로세서에 대한 일부 코드 컴파일은 기존 8 비트 또는 16 비트 아키텍처보다 더 많은 오버 헤드를 수반 할 수 있습니다. 여기에는 더 큰 메모리 오버 헤드 (정렬 문제) 또는 CPU 오버 헤드 (CPU가 비트 순서를 조정하거나 정렬되지 않은 명령어 사용 등) 또는 둘 다가 포함될 수 있습니다.
코드와 라이브러리 등에서 차지하는 디스크 공간은 일반적으로 "오버 헤드"라고하는 것이 아니라 "풋 프린트"라고합니다. 또한 프로그램이 처리하는 데이터 세트에 관계없이 프로그램이 사용하는 기본 메모리를 "풋 프린트"라고합니다.
오버 헤드는 단순히 프로그램 실행에서 더 많은 시간이 소요됩니다. 예 ; 함수를 호출하고 정의 된 곳에서 제어를 전달 한 다음 본문을 실행하면 CPU가 긴 프로세스를 통해 실행되도록합니다 (먼저 제어를 메모리의 다른 위치로 전달 한 다음 거기서 실행 한 다음) 컨트롤을 이전 위치로 다시 전달) 따라서 성능 시간이 많이 걸리므로 오버 헤드가 발생합니다. 우리의 목표는 함수 정의 및 호출 시간 동안 인라인을 사용하여 인라인을 사용 하여이 오버 헤드를 줄이는 것입니다.이 함수는 함수 호출시 함수의 내용을 복사하므로 제어를 다른 위치로 전달하지 않지만 프로그램을 한 줄로 계속 진행하므로 인라인 .
오버 헤드의 구체적인 예는 "로컬"프로 시저 호출과 "원격"프로 시저 호출의 차이입니다.
예를 들어, 고전적인 RPC (및 EJB와 같은 다른 많은 원격 프레임 워크)에서 함수 또는 메소드 호출은 로컬, 메모리 호출 또는 분산 네트워크 호출 여부와 상관없이 코더와 동일하게 보입니다.
예를 들면 다음과 같습니다.
service.function(param1, param2);
이것이 정상적인 방법입니까, 아니면 원격 방법입니까? 당신이 여기에서 무엇을 볼 수 없습니다.
그러나 두 호출 간의 실행 시간 차이가 극적이라고 상상할 수 있습니다.
따라서 핵심 구현은 "동일한 비용"이 소요되지만 관련된 "오버 헤드"는 상당히 다릅니다.