본문 바로가기
programing/C++

비동기 입출력

by RedWiz 2017. 3. 10.

비동기 입출력은 Win32 파일 입출력 함수의 큰 자랑거리이나 사실 실용성은 거의 빵점에 가깝다.

일단 요즘 하드 디스크 성능이 너무 좋아져서 50M 정도를 출력하는 것은 불과 2초 정도면 충분(정말 빠른 하드 디스크는 1초도 채 안 걸린다.)하기 때문에 굳이 동기화 객체까지 써가며 복잡한 비동기 입출력을 할 필요가 없다. 만약 600M 정도의 큰 데이터를 입출력 한다면 동기 출력과 비동기 출력의 차이가 발생할 수도 있겠지만 이 경우도 현실성이 없다. 왜냐하면 입출력 자체는 비동기적으로 할 수 있지만 600M 버퍼는 한꺼번에 제공해야 하는데 600M 메모리를 부담 없이 내 줄 수 있는 PC는 드물기 때문이다.


그러나 비동기 입출력이 정말 제대로 사용되는 경우도 있는데 디스크 상의 파일이 아닌 직렬, 병렬 통신 포트나 파이프, 메일 슬롯 등 상대적으로 느린 장치로 입출력을 할 때이다. 이런 경우를 제외 하고 하드 디스크의 파일에 대해서 입출력을 할 때는 멀티 스레드가 가장 좋은 해결책이다. 스레드는 입출력 동작 중에도 읽은 데이터를 사용할 수 있고 출력할 데이터를 실시간으로 만들 수도 있으며 많은 동기화 객체를 활용할 수 있기 때문이다.


ps. 삽질 ㄳ...


- 실시간으로 대용량으로 출력을 하려면 비동기 출력이 낫다.

동기 출력에 비해 빠른 성능을 기대할 수 있다.


- 버퍼 포인터 관리하기 힘들면 큰 하나의 버퍼에 담아서 출력하는 것이 낫다.


- 버퍼 포인터는 독립적으로...

.... 라기 보다는 버퍼 포인터는 IO 작업이 완료될 때까지 독립적으로 사용하여야 한다.

'programing > C++' 카테고리의 다른 글

정렬  (0) 2017.03.25
문자열 주의점  (0) 2017.03.24
쓰레드 사용시에...  (0) 2017.03.07
APC(Asynchronous Procedure Call)  (0) 2017.02.23
VLD(Visual Leak Detector) 사용법  (0) 2017.02.22