
캐시가 특별한 종류의 버퍼라는 말이 맞나요? 둘 다 비슷한 기능을 수행하지만 제가 놓친 근본적인 차이점이 있습니까?
답변1
Wikipedia의 기사에서데이터 버퍼:
버퍼는 데이터가 한 장소에서 다른 장소로 이동하는 동안 데이터를 임시로 보관하는 데 사용되는 물리적 메모리 저장소의 영역입니다.
ㅏ완충기결국 한 저장 위치에서 다른 저장 위치로 전송되는 모든 단일 데이터 조각을 순환하고 보유하게 됩니다(예: 오디오 처리에서 순환 버퍼를 사용할 때). 버퍼는 데이터 스트림에서 현재 위치 전후의 데이터 "버퍼"를 허용합니다.
실제로 버퍼와 캐시에는 몇 가지 공통된 측면이 있습니다. 그러나 전통적인 의미의 캐시는 일반적으로~ 아니다데이터가 한 장소에서 다른 장소로 이동될 때 모든 데이터를 저장합니다(예: CPU 캐시).
목적은은닉처투명한 방식으로 데이터를 저장하는 것입니다. 즉, 성능 저하 없이 나머지 데이터를 전송할 수 있도록 충분한 데이터만 캐시됩니다. 이 맥락에서 캐시는 전송 속도, 캐시 크기 등에 따라 소량의 데이터만 "프리페칭"합니다.
주요 차이점은 결국 버퍼가 모든 데이터를 보유하게 된다는 것입니다. 반대로 캐시는 데이터의 전부, 일부 또는 전혀 보관하지 않을 수도 있습니다(설계에 따라). 그러나 캐시는 처음에 데이터에 직접 액세스하는 것처럼 액세스됩니다. 정확히 캐시되는 내용은 캐시의 "사용자"에게 투명합니다.
차이점은상호 작용. 캐시를 사용하여 데이터 원본에 액세스할 때 캐시를 마치 캐시처럼 사용합니다.~이다데이터 원본 - 캐시를 통해 데이터 원본의 모든 부분에 액세스할 수 있으며, 캐시는 데이터의 출처(캐시 자체 또는 원본)를 결정합니다. 캐시 자체는 미리 로드할 데이터 부분을 결정합니다(일반적으로 시작 부분이지만 경우에 따라 전체).캐시 교체 알고리즘in use는 캐시에서 무엇을/언제 제거할지 결정합니다. 이에 대한 가장 좋은 예는 시스템입니다.CPU 캐시그 자체는프리페처/미리 읽어. 둘 다 가장 많이 사용할 것으로 생각되는 데이터 부분을 메모리에 로드하고, 캐시되지 않은 항목이 있으면 하드 드라이브로 되돌립니다.
반대로, 새 부분이 이미 버퍼로 이동되지 않은 한 버퍼를 사용하여 데이터 스트림에서 위치를 즉시 이동할 수 없습니다. 그렇게 하려면 버퍼를 재배치해야 하며(새 위치가 버퍼 길이를 초과하는 경우) 새 위치에서 버퍼를 "다시 시작"해야 합니다. 이에 대한 가장 좋은 예는 Youtube 비디오에서 슬라이더를 움직이는 것입니다.
버퍼의 또 다른 좋은 예는 Winamp에서 오디오를 재생하는 것입니다. 오디오 파일은 CPU에서 디코딩되어야 하기 때문에 노래를 읽어들이고, 오디오를 처리하고, 사운드 카드로 전송하는 데 시간이 걸립니다. Winamp는 일부 오디오 데이터를 버퍼링하여 "잠김"을 방지할 만큼 충분한 오디오 데이터가 이미 처리되도록 합니다. 즉, CPU는 항상 수백 밀리초 내에 들을 수 있는 오디오를 준비하고 있으며 이는 결코 실시간이 아닙니다. ; 듣는 내용은 과거에 CPU가 준비한 버퍼에서 나옵니다.
답변2
캐시는 동일한 데이터의 여러 사용을 의미하는 버퍼의 특정 사용 패턴이라고 말하는 것이 더 정확할 것입니다. 대부분의 "버퍼" 사용은 데이터가 한 번 사용된 후 배수되거나 폐기된다는 것을 암시하는 반면(반드시 그런 것은 아니지만) "캐시"는 데이터가 여러 번 재사용된다는 것을 의미합니다. 캐싱은 또한 데이터가 동시에 사용되면서 저장된다는 것을 의미하는 경우가 많지만 반드시 그런 것은 아니지만(프리페칭 등) 버퍼링은 데이터가 나중에 사용하기 위해 저장된다는 것을 의미합니다.
그러나 구현과 사용 측면에서 확실히 큰 중복이 있습니다.
답변3
캐시와 버퍼의 중요한 차이점 중 하나는 다음과 같습니다.
버퍼는 기본 메모리의 일부입니다. 이는 기본 메모리(RAM)에 존재하고 액세스되는 구조입니다.
반면에 캐시는 컴퓨터의 메모리 계층 구조에서 별도의 물리적 메모리입니다.
버퍼는 버퍼 캐시라고도 합니다. 이 이름은 버퍼의 사용이 캐시의 사용, 즉 데이터 저장과 유사하다는 사실을 강조합니다. 차이점은 사용법의 맥락에 있습니다.
버퍼는 데이터를 임시로 저장하는 데 사용되며, 데이터는 한 개체에서 다른 개체로 이동됩니다. 예: 디스플레이 버퍼를 위해 인터넷에서 PC로 비디오를 이동할 때 다음에 표시될 비디오 프레임을 저장하는 데 사용됩니다. (이것은 성공적인 버퍼링 프로세스 후에 비디오가 원활하게 실행되므로 QoS를 증가시킵니다.) 예: 또 다른 예는 파일에 데이터를 쓸 때의 시나리오입니다. 새로 작성된 데이터는 즉시 보조 메모리에 복사되지 않습니다. 변경된 내용은 버퍼에 저장되며, 설계된 정책에 따라 보조 메모리(하드디스크)의 파일에 다시 반영됩니다.
반면에 캐시는 기본 메모리와 프로세서 사이에 사용되어 RAM 실행 속도와 프로세서 사이의 격차를 해소합니다. 또한 가장 자주 액세스하는 데이터는 캐시에 저장되어 RAM에 대한 액세스를 줄입니다.
답변4
공통점: 둘 다 계산과 "주" 저장소 사이의 중간 데이터 저장소 구성 요소(소프트웨어 또는 하드웨어)입니다.
나에게 차이점은 다음과 같습니다.
완충기:
- 핸들잇달아 일어나는데이터에 대한 액세스(예: 파일 또는 소켓에서 데이터 읽기/쓰기)
- 활성화연산과 메인 스토리지 사이의 인터페이스,적응하다데이터 생산자와 데이터 소비자의 서로 다른 데이터 전송 패턴. 예를 들어 계산은 작은 양의 데이터를 기록하지만 디스크 드라이브는 특정 크기의 데이터 조각만 수용할 수 있습니다. 따라서 버퍼는 작은 조각을 입력으로 축적하고 이를 더 큰 출력 조각으로 다시 그룹화합니다.
- 그래서 그것은 마치어댑터디자인 패턴. 직접 상호 운용할 수 없는 두 개의 상호 작용 구성 요소를 결합합니다.
- 예: 디스크 버퍼, Java 언어의 BufferedReader, 컴퓨터 그래픽의 듀퍼링.
은닉처:
- 핸들무작위의데이터에 대한 액세스(예: CPU 캐시는 필요하지 않은 메모리 라인을 순차적으로 캐시합니다.)
- 최적화메인 스토리지에 접근하는 속도가 빨라집니다. 예를 들어 CPU 캐시는 메모리에 대한 액세스를 방지하여 CPU 명령을 더 빠르게 만듭니다.
- 그것은 마치데코레이터디자인 패턴. 원칙적으로 직접 상호 운용할 수 있는 두 개의 상호 작용 구성 요소를 (종종 투명하게) 결합하지만 상호 작용을 더 빠르게 만듭니다.
- 예: CPU 캐시, 페이지 캐시, 웹 프록시, 브라우저 캐시.