2012-11-16 2 views
1

IO Stream Buffering의 기본 개념을 찾을 수없고 그 의미는 무엇입니까? 자습서와 링크가 도움이 될 것입니다.IO 스트림 버퍼링이란 무엇입니까?

+0

정의에 대한 C++ 표준의 섹션 27.6.2. 튜토리얼 또는 참조 용 [이 책의 일부] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). [이 하나] (http://www.amazon.com/dp/0201183951/?tag=stackoverfl08-20)는 유망하다고 생각합니다. 직접 읽지는 않았지만 말입니다. –

답변

1

버퍼링은 입력 및 출력을 처리하는 소프트웨어의 기본 부분입니다. 하드웨어와 소프트웨어가 다른 속도로 실행되기 때문에 버퍼는 소프트웨어 인터페이스와 하드웨어 인터페이스 사이에있는 데이터를 보유합니다.

데이터를 생성하는 구성 요소는 버퍼에 넣을 수 있으며 나중에 버퍼는 수집 된 데이터를 다음 구성 요소로 보내 "플러시"됩니다. 마찬가지로, 다른 구성 요소는 완전한 데이터 조각 또는 효율적으로 처리 될 충분한 데이터가 입력에 사용될 때까지 "버퍼에서 대기 중"일 수 있습니다.

C++에서 std::basic_filebuf은 파일 시스템 파일에 대한 버퍼를 구현합니다. 운영 체제가 항상 최소 트랜잭션 크기로 작동하도록 프로그램은 원하는 경우 개별 문자에 액세스 할 수 있도록 최대 고정 바이트 수를 저장합니다.

Wikipedia을 참조하십시오.

+0

감사합니다 !! ! 하지만 IO 스트림에서 어떻게 이루어 졌는지 알고 싶습니다. – khirod

+0

@khirod 꽤 일반적인 내용이지만 ... IOStream은 매우 정교한 시스템을 가지고 있습니다. 자세한 내용은 http://en.cppreference.com/w/cpp/io/basic_filebuf를 참조하십시오. – Potatoswatter

+0

고마워, 알았어 :) – khirod

1

버퍼링은 데이터 (즉, 디스크)로 데이터를 직접 전송하는 대신 메모리 (사용자 메모리)를 사용합니다. 컨텍스트 스위치에 저장합니다.

+0

C++ 언어의 모든 코드가 더 명확하게 나타납니다. – khirod

+0

http://linux.die.net/man/3/fread 및 http://linux.die.net/man/3/fwrite 등 –

1

다음은 개념입니다. 하드 드라이브에 데이터를 기록해야하는 애플리케이션이 있다고 가정 해보십시오. 30 분마다 한 번씩 (예 : 로그 파일 업데이트) 쓰기를 원한다고 가정 해 봅시다. 이거 좋은가요? 아니오, 여기에는 이유가 있습니다.

소프트웨어는 매우 빠르지 만 HDD가 작동 할 수있는 속도는 제한되어 있으며 메모리와 응용 프로그램보다 훨씬 느립니다. 디스크를 쓰려면 HDD가 자기 헤드를 특정 섹터 (디스크 회전 속도를 느리게하는 작업)로 옮기고 데이터를 기록한 다음 다시 위치를 변경해야합니다. 따라서 응용 프로그램이 매우 느리게 작동 할 수 있습니다 (당연히 이론적 인 예입니다).

버퍼링은 이것을 처리하는 데 도움이됩니다. 매회 디스크에 기록하는 대신 데이터가 메모리 어딘가에 버퍼에 축적됩니다. 충분한 양의 데이터가 수집되면 버퍼가 플러시됩니다. 버퍼의 데이터가 디스크에 기록됩니다. 이러한 접근 방식은 HDD 작동을 최소화하고 전반적인 속도를 향상시키는 데 도움이됩니다.

관련 문제