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