본문 바로가기

프로그래밍/Java

Buffer VS Cache

반응형

해당 포스트의 작성 목적

캐시(Cache)를 공부하면서 유사하게 사용되는 버퍼에 대해서도 궁금해졌다.

특히 캐시(Cache)의 느린 속도의 장치 대신 데이터를 저장하다가, 이후 한시에 느린 속도의 장치로 저장해주는 기능이 버퍼의 기능과 매우 유사하게 느껴졌다. 그럼 결국 캐시가 버퍼의 역할을 모두 수행할 수있고, 둘은 차이가 거의 없다고 봐도 되지 않을까? 라는 생각과 함께, 둘의 명확한 차이와 쓰임새를 알기위해서 작성한다.

Buffer VS Cache

Cache

캐시(Cache)란 속도가 다른 두 기기간의 병목현상을 완화해주는 장치다.

고속의 기기에 대해서는, 미리 데이터를 받아둠으로써, 저속의 기기에 맞추지 않고 바로 데이터를 가져올수 있고, 반대로 저속의 기기에 대해서는 고속의 기기가 대신 받아 저장한 후 이후 한번에 저속의 기기에 저장해(버퍼의 기능과 유사한 측면이 있다.), 병목현상을 줄일 수 있다.

Buffer

데이터를 전송하는 상호간의 장치에서 고속의 장치와 저속의 장치 간의 속도 차이로 인해 저속의 장치가 작업을 하는 동안 고속의 장치가 기다려야 하는 현상을 줄여주는것이다.

예를 들어 프린트를 인쇄한다고 하자, 버퍼가 없다면 컴퓨터는 프린트가 모든 페이지를 인쇄하기 전까지 다른 행동을 하지 못하고 기다려야 한다. 그러나 버퍼를 이용하면, 컴퓨터는 버퍼로 데이터를 보내고, 프린터는 컴퓨터로부터 데이터를 바로 받지 않고, 버퍼를 통해서 받는다. 이렇게해서 컴퓨터는 프린터가 인쇄할때까지 기다리지 않고, 버퍼에게만 보내주면 된다.

즉 장치나 프로세스가 상대방에 의해 정체되지 않고 잘 동작할 수 있도록 해주는 메모리다.

추가적으로 버퍼는 고속의 장치에서 저속의 장치로 보낼때

데이터의 손실을 막기위해서

쓰인다.

예를 들어 키보드 타이핑을 1234567890을 빠르게 치면 처리를 못해서 1236790이 쳐질수도있다.

그럿것을 막기위해 키보드는 사용자가 치는 키를 차례차례 버퍼에 받아 두었다가, 처리가 되는 데로 계속 내보내는 것이다.

차이점

캐시(Cache)와 버퍼의 공통점은

추가적인 메모리를 소모함으로써 속도차이를 보상

함에 있다.

차이점으로는, 버퍼는 일반적으로 캐시에 비해서 처리크기가 크기 때문에, 데이터를 저장할 수없다. 한번의 연산이 끝나면 사용된 데이터는 폐기된다. 이에 반해 캐시(Cache)는 캐시메모리에 해당 데이터를 저장하여 추후에도 계속 사용 할 수있다.

탄생한 목적도 둘은 상이하다. 캐시(Cache)는 어떤 작업의 속도를 증진시키기 위해 탄생했지만, 버퍼는 속도의 증진만을 목적으로 하느것이 아닌, 개별 작업들 간의 협동(무결성, 고속장치의 기다림 등)을 지원하기 위해 존재한다.

 

이러한 특성들로 주로 캐시는 읽기부분에, 버퍼는 쓰기부분에 사용된다.

포스트 작성 후 알게된점

버퍼와 캐시의 묘하게 비슷한 기능과, 효과로 많이 했갈렸었다. 실제로 사이트에서 검색시 많은 사람들이 버퍼와 캐시를 혼용해서 쓰는것을 볼 수 있었다. 캐시는 자주사용되는 자원을 메모리에 올려두고, 해당 요청이 들어왔을때 CPU가 디스크가 아닌 캐시메모리에서 찾아 빠른 속도로 응답하는 것에 주된 목적이 있고, 버퍼는 캐시보다 일반적으로 용량이 크며, 캐시와 달리 데이터를 저장할 수없고, 응답에 대한 요청을 저속의 장치에서 출력할 때, 고속의 장치가 저속의 장치로 인해 정지되는것을 막아준다.

좀더 쉽게 비유해보자면, 캐시는 카페에서 잘팔리는 음료의 재료는 바로 손이닿는곳에 두어 더 빠르게 서빙을 나갈수 있게 해주는것 이고, 버퍼는 서빙을 나갈때, 한잔 한잔 모두 서빙하고 와서 다시 음료를 재조하는 것이 아니라, 한번에 트레이에 담아서 손님들의 대기시간 없이 서빙을 하는 방법이다.

Reference

반응형

'프로그래밍 > Java' 카테고리의 다른 글

String의 == 연산시 동작  (0) 2021.05.13
equals() 와 ==  (0) 2021.05.12
캐시는 어느영역에서 사용되나?  (0) 2021.05.11
캐시(Cache)란?  (0) 2021.05.11
String  (2) 2021.05.10