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