반응형
Buffer
날짜: 2021년 6월 14일
학습목표
통산 Buffer에 데이터를 쌓아두었다가 한번에 저장하는것이, 데이터를 받자마자 저장하는 방식보다 더 효율이 좋다고 한다. 왜일까? 기존에 알고있던 지식으로는 데이터를 일일이 받을때마다, 디스크까지 저장하는 방식이 느리기 때문에, 속도가 빠른 버퍼메모리에 데이터를 쌓아뒀다가, 한번에 저장하는것이 더 효율적이다. 라고 알고있었다. 지난 멘토링에서 '블록' 개념에 대해서 알고있어야 한다고 들었다. 버퍼와 블록, 이 둘을 연관지어 왜 버퍼를 사용하는것이 더 효율적인지 알아보자.
- 버퍼를 쓰면 더 빠른이유
- 버퍼와 블록
버퍼를 쓰면 더 빠른이유
기존에 알고있던 지식
- 데이터를 저장할때마다 속도가 느린 디스크에 저장하는것보다, 일정량의 데이터를 모았다가 한번에 디스크에 저장하는것이 더 빠르다.
- 데이터 저장시 버퍼를 이용하지 않으면, CPU는 데이터가 디스크에 저장이 될때까지 기다려야한다. 그러나, 버퍼가 있다면, 버퍼에 쌓아두고 바로 CPU는 다른연산을 수행할 수 있다.
1번과 2번 모두 데이터가 디스크까지 가게될 경우 발생하는 오버헤드에 관한 이야기다. 자, 그럼 버퍼와 블록은 무슨 상관일까?
버퍼와 블록
버퍼를 사용할때 더 효율적인 이유는 바로 '블록'의 개념에 있다.
컴퓨터는 디스크에 데이터를 저장할때 '블록' 단위로 저장한다. 그렇기때문에, 블록사이즈가 512kb라면, 1kb를 저장한다 할지라도, 512kb의 블록에 접근하여 저장한다. 반면 500kb의 데이터를 저장한다 할지라도, 512kb블록에 한번 접근해 저장한다. 즉 데이터의 크기가 매우 차이나지만, 블록사이즈를 초과하지 않으므로, 둘의 디스크접근 시간은 동일해진것이다.
즉, 1kb의 데이터를 500번 디스크에 접근하는것보다, 500kb의 데이터를 버퍼메모리에 쌓아두었다가 한번에 저장하는것이 훨씬 효율적이다.
Feedback
알게된 점
- 버퍼를 쓰면 더 빠른이유
- 버퍼를 쓰면 데이터가 디스크에 저장되기까지의 과정을 줄일수있다. (디스크는 속도가 느리므로, 과정이 많으면 오버헤드가 증가한다)
- 버퍼를 쓰지않으면, CPU는 데이터가 디스크에 완전히 쓰이기까지 대기해야한다.(Blocking, Sync I/O)
- 데이터는 디스크에 저장될대 byte단위로 저장되는게 아니라, '블록'단위로 저장된다. 즉, 블록사이즈를 초과하지 않는이상, 1byte든, 100byte든 메모리에서 디스크에 저장되는 시간소요는 같다. 그러므로, 버퍼메모리에 적재한후 한번에 디스크에 저장하는것이 훨씬 효율적이다.
- 버퍼와 블록
- 디스크는 블록단위로 데이터를 저장한다. 그렇기 때문에, 블록사이즈 이하의 데이터는 크기와 관계없이 메모리에서 디스크로 저장되는 시간소요가 똑같다. 그러므로, 블록이하의 크기에 대해서는 버퍼메모리에 유지후, 한번에 디스크에 저장하는 것이 유리하다.
알아야 할 점
References
반응형
'프로그래밍 > Java' 카테고리의 다른 글
네트워크 통신(2) (0) | 2021.06.15 |
---|---|
네트워크 통신(1) (0) | 2021.06.15 |
NIO(3) (0) | 2021.06.14 |
NIO(2) (0) | 2021.06.14 |
NIO(1) (0) | 2021.06.14 |