버퍼란, 장치와 장치 간의 데이터 전송을 할 때, 완충작용을 하기 위한 임시 데이터 공간이다.
위의 그림과 같이 입력스트림을 통해 키보드와 컴퓨터(CPU)가 연결되어있다고 생각해 보자
키보드라는 입력장치와 컴퓨터의 연산장치는 데이터를 처리하는 속도가 다르다. 즉, 키보드는 초당 1회라고 한다면 컴퓨터는 초당 10회를 할 수 있다고 생각해보자.
만약, 이처럼 완충장치가 존재하지 않는 상태에서 키보드에서 스트림을 통해 CPU로 데이터를 전달한다면, 아무리 컴퓨터의 성능이 뛰어나다 하더라도 초당 1회의 연산밖에 하지 못하게 된다.
위 그림처럼 임시저장소를 만들게 되면 키보드로 부터 입력받는 데이터를 모아서 한번에 CPU에게 전달한다.
그렇다면 CPU는 정상적으로 자신의 성능만큼 업무를 수행할 수 있게 되는 것이다.
여기에서 임시 저장소가 바로 버퍼이다.
하드웨어 뿐 아니라 소프트웨어적인 부분에서도 사용되는 흔히 우리가 동영상을 스트리밍해서 볼 때, 일정량의 데이터를 버퍼에 모아 한 번에 출력하는 것을 버퍼링이라고 한다.
스풀이란, CPU와 입출력 장치가 독립적으로 동작하도록 하는 소프트웨어적인 버퍼의 일종이다.
캐시란, 위의 저장공간 계층 구조에서 확인할 수 있듯이, 자주 사용하는 데이터나 값을 미리 복사해 놓은 임시 저장소이며, 저장 공간이 작고 비용이 비싼 대신, 빠른 성능을 제공한다.
- 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우(서버의 균일한 API데이터)
- 반복적으로 동일한 결과를 돌려주는 경우(이미지나 썸내일 등)
위의 그래프처럼 20%의 요구가 시스템 리소스의 대부분을 사용한다는 법칙이다. 그렇기 때문에 20%의 기능에 캐시를 이용함으로써, 리소스 사용량은 대폭 줄임과 동시에 성능은 대폭 향상이 가능하다.
이 둘은, 프로세서와 입출력 장치 사이의 통신의 일종이다.
폴링은 특정 주기마다 스레드를 돌며 시그널이 들어 왔는지 확인하는 방식이다. 소프트웨어적인 시그널 확인이다.
장점
단점
인터럽트는 외부 인터럽트 핀에 신호가 들어오면 즉시 인터럽트 소스를 실행하고 다시 원래 코드로 돌아오는 방식이다. 하드웨어적인 시그널 확인이다.
장점
단점