*버퍼
란 임시 저장 공간을 의미 합니다. 임시 저장 공간이라고 해서 쌩뚱맞게 보일 수 있지만 정확히 말하면 A와 B가 서로 입출력을 수행
하는데에 있어서 속도차이를 극복하기 위해 사용하는 임시 저장 공간을 의미 합니다.*
YouTube StateBar
*이 버퍼라는 개념은 굉장히 다양하게 사용되는데 가장 쉽게 접할 수 있는 곳은 유튜브같은 동영상 스트리밍 사이트입니다. 스트리밍 사이트에서 실시간으로 동영상을 보게 되면 보통 **동영상이 진행되는 부분(빨간색)*과 동영상을 내려받은 부분(밝은 회색) 그리고 앞으로 다운로드가 남은 부분을 본 적이 있을 것입니다.
여기서 저 밝은 회색부분을 버퍼
라고 볼 수 있습니다.
동영상 데이터가 내려 받아지는 속도에 비해 우리가 동영상을 1초씩 진행되며 보는 속도에는 차이가 있습니다. 만약 우리가 동영상을 보는 속도와 데이터를 내려받는 속도가 같다면 동영상 재생시간이 50분 짜리 영상이라면 50분 동안 데이터를 내려받아야 합니다.
그러나 이는 비효율적이므로 버퍼
라는 임시 저장공간을 두고 동영상 데이터를 버퍼
에 최대한 바른 시간 안에 내려받아 저장해 둡니다. 동영상 시청자는 동영상을 느긋하게 즐기면 어느덧 동영상이 버퍼
에 모두 다운로드 되어 있을 것입니다.
인터넷이 많이 느리던 시절에는 동영상을 버퍼
에 다운로드 하는 속도가 동영상을 시청하는 속도를 따라가지 못해 빨간 부분이 회색 부분을 따라잡게 됐고 동영상이 멈추는 일이 빈번했습니다. 그리고 이를 버퍼링
이 걸린다 라고들 이야기 했습니다.
프로그래밍이나 운영체제에서 사용하는 버퍼
는 거의 대부분 CPU와 보조기억장치(SSD, HDD) 사이에서 사용되는 임시 저장 공간을 의미합니다.
그러나 보조기억 장치의 경우 데이터를 주고 받는데에 많은 시간이 필요합니다. 물리적인 HDD(하드디스크)의 경우 데이터를 전송할 수 있는 속도는 빨라야 초당 100MB ~ 300MB 입니다.
간단하게 얘기 하자면 CPU는 1초에 100개의 데이터를 처리할 수 있지만 정작 처리할 데이터를 가지고 있는 보조 기억 장치는 데이터를 1초에 세 개밖에 보내주지 않는 것입니다. CPU 입장에서는 아무리 일을 열심히 하고 싶어도 데이터를 보내주지 않기 때문에 능력에 비해 97개 만큼 효율성을 잃게 됩니다.
이 때 버퍼
를 사용하게 됩니다. 버퍼
는 CPU 내부에 있는 캐시 메모리
보다는 느리지만 보조 기억 장치보다 훨씬 빠른 주기억장치(RAM)의 버퍼
로 마련해둔 공간에 데이터를 열심히 보내 쌓아둡니다.