고민하기

버퍼(Buffer)를 사용하면 속도가 빨라진다?

pythaac 2021. 8. 2. 02:56

버퍼는 처리속도를 빠르게한다?

  운영체제를 공부하면서 "버퍼"를 오랜만에 접했다. 내가 버퍼하면 가장 먼저 떠오르는 것은, 네트워크에서 패킷에 데이터를 싣는 과정에 사용되는 버퍼다. 그리고 운영체제에서 설명하는 버퍼는 속도 차이를 가지는 장치 사이에서 사용된다고 한다. 버퍼의 의미가 "완충기"인 것처럼, 두 버퍼 모두 같은 역할이며 존재하는 의미도 같다. 그런데 버퍼에 대해 검색하던 중, 아래 문구를 보고 신경쓰였다.

버퍼를 사용하면 속도가 빨라진다[0][1]

버퍼라는게 속도가 다른 두 장치 사이의 데이터 교환에서 유용한 건 알겠지만, 어떤 측면에서는 불필요한 과정이 추가되었기 때문에 오버헤드가 생긴 것이다. 그럼에도 버퍼를 사용하면 속도가 빨라진다는 말이 어떻게 생긴 것인지 궁금했다.

 

버퍼의 동작

  먼저 버퍼가 없을 때와 있을 때의 과정을 쉽게 정리해보았다.

 

버퍼가 없다면?

주황색 네모 1개당 하나의 데이터라고 해보자. Process는 한 번에 3개의 데이터를 처리할 수 있다는 의미다. 그러나 데이터는 1개씩 도착하며, 수신하는 데이터와 처리하는 속도의 차이가 생긴다. 이렇게 3개의 데이터를 한 번에 처리할 수 있음에도, 도착한 데이터는 1개뿐이므로 1개의 데이터만 처리한다. 즉, 처리할 수 있는 능력에 비해 적은 효율로 데이터를 처리하고 있다.

 

버퍼를 사용한다면?

그렇다면 버퍼를 사용하면 어떨까? 버퍼가 있다면 데이터가 도착해도 위 그림 (4)와 같이 데이터가 버퍼만큼 모두 채워질 때까지 데이터를 처리하지 않는다. 그리고 버퍼의 데이터가 채워지면, (6)에서 보듯이 3개의 데이터를 한 번에 처리한다.

 

버퍼로 속도가 빨라진 것 같지 않다

  위에서 살펴본 바로는 버퍼를 사용하면서 한 번에 처리할 수 있는 데이터의 양이 1에서 3으로 늘었다. 그렇다면 이를 근거로 속도가 빨라졌다고 하는 것일까? 사실 잘 생각해보면 속도가 빨리진 것이 아니다. 버퍼가 없으면 데이터가 도착할 때 바로 처리한다. 그러나 버퍼가 있을 땐 버퍼가 다 찰 때까지 기다려야하기 때문에, 같은 시간에 더 많은 데이터를 처리한 것은 아니다. 오히려 데이터가 도착하자마자 바로바로 처리하는 것이 더 빠를 수도 있다.

 

데이터 처리 속도가 아니라 시스템 전체의 속도다

  결론적으로 버퍼는 데이터가 저장되는 시간동안 다른 처리를 할 수 있게 해준다. 컴퓨터 시스템에서는 위 버퍼가 담당하는 데이터 처리 외에도 수많은 작업들을 처리해야한다. 이런 상황에서 버퍼가 없는 환경은 비효율적이다.

  데이터가 도착하는 시간보다 처리속도가 빠르면 데이터가 도착했는지 확인하며 기다려야한다. 위 그림처럼 3개의 데이터를 한 번에 처리할 수 있지만 1개씩 도착하는걸 다르게 표현하면, 3초동안 처리시간이 1초이고 데이터가 도착했는지 확인하며 2초를 노는 것이다. 이 시간에 다른 처리를 할 수 있다.

  다른 처리를 한다는 것은 컴퓨터가 처리해야할 다른 작업의 양이 줄어든다는 것으로, 컴퓨터 자체의 속도가 빨라진다는 의미이다. 즉, 속도 차이가 있는 장치에서 버퍼를 사용한다는 것은 버퍼가 관여하는 데이터의 처리에 대한 내용이 아니다.

  뭐 이런 걸로 고민하나싶을 수 있지만... 의문이 들었던 점은 확실하게 짚고 넘어가야하고, 누군가도 궁금해할 수 있다고 생각한다!

 

참조

[0] https://kineo2k.tistory.com/31

 

캐시(cache)와 버퍼(buffer)의 차이

"캐시"란 속도가 다른 두 장치 사이에서 속도차이를 메워주는 장치입니다. 시스템에서는 많은 기기사이의 데이터 흐름이 항상 일어나고 있습니다. 만약 모든 기기들이 같은 속도와 대역폭으로

kineo2k.tistory.com

[1] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kng8265&logNo=110151130054 

 

버퍼란?

컴퓨터의 주기억 장치와 주변장치 사이에서 데이터를 주고받을 때, 둘 사이의 전송속도 차이를 해결하기 위...

blog.naver.com