-
Notifications
You must be signed in to change notification settings - Fork 0
IOThreadPool Class
File I/O를 수행하기 위한 스레드풀 클래스
-
_completionPortOverlapped I/O를 위한 IOCP 초기화 -
_threadMaxSize스레드풀에서 사용할 스레드의 수 -
_workerThreads스레드들의 handle을 보관할 std::vector -
_createQueue파일 열기를 따로 수행하는 ThreadMode에서만 사용하는 queue -
_readQueue파일 읽기를 위한 queue -
_fileInfoHashMap파일 정보를 보관하고 key로 탐색하기 위한 std::unordered_map -
_csCreateRead,_csProcess공유 데이터 접근을 위한 CRITICAL_SECTION들 -
_numCreatedFiles,_numReadFiles,_numProcessedFiles스레드들이_targetNumFiles로 완료를 확인하기 위한 counter들 -
_targetNumFiles처리할 총 파일 수 -
_maxReadProcCountThreadMode::READ_N_AND_PROCESS_N에서 한번에 연속적으로 읽거나 처리할 파일 수 -
_startIOtime,_endIOtimeQueryPerformanceCounter로 File I/O에 소요된 시간을 측정하기 위한 변수들
CRITICAL_SECTION을 초기화하고, ThreadMode에 따라서 _threadMaxSize개의 스레드를 만든다.
파일 경로를 받아 _fileInfoHashMap에 파일 정보를 추가한다.
파일 열기 및 읽기를 위해 _readQueue에 key를 추가한다.
파일 경로를 받아 _fileInfoHashMap에 파일 정보를 추가한다.
파일 열기를 위해 _createQueue에 key를 추가한다.
작업이 끝난 스레드들과 CRITICAL_SECTION, IOCP를 삭제하고 할당한 메모리를 해제한다.
File I/O에 소요된 시간을 콘솔로 출력한다.
비동기인 threadCreateReadFile 함수로 파일 열기 및 읽기 요청을 모두 수행한 후에
읽기가 완료된 파일들에 대한 processing을 수행한다.
비동기인 threadCreateReadFile 함수로 파일 열기 및 읽기 요청과 읽기가 완료된 파일들에 대한 processing을
각각 확인하며 반복한다.
각 스레드가 _maxReadProcCount로 정한 횟수에 따라서
비동기인 threadCreateReadFile 함수로 파일 열기 및 읽기 요청을 일정 횟수 반복하고
읽기가 완료된 파일들에 대한 processing을 수행하는 것을 일정 횟수 반복한다.
threadOnlyCreateFile 함수로 파일 열기를 모두 수행한 후에
비동기인 threadOnlyReadFile 함수로 열린 파일들에 대한 읽기 요청을 모두 수행한다.
이후 읽기가 완료된 파일들에 대한 processing을 수행한다.
threadOnlyCreateFile 함수로 파일 열기를 모두 수행한 후에
비동기인 threadCreateReadFile 함수로 파일 열기 및 읽기 요청과 읽기가 완료된 파일들에 대한 processing을
각각 확인하며 반복한다.
비동기인 threadCreateReadFile 함수로 파일 열기 및 읽기 요청만을 모두 수행한 후에 스레드를 종료한다.
읽기가 완료된 파일들에 대한 processing만을 수행한다.
동기로 파일 열기 및 읽기 요청, 읽기가 완료된 파일들에 대한 processing을 수행한다.
비동기로 파일 캐싱 없이 파일을 열고 IOCP에 등록한다. 파일 크기에 따라 버퍼를 할당하고 읽기를 요청한다.
비동기로 파일 캐싱 없이 파일을 열고 IOCP에 등록하는 작업만을 수행한다.
열린 파일의 크기에 따라 버퍼를 할당하고 읽기를 요청하는 작업만을 수행한다.
DummyFileGenerator에서 파일을 생성하면서 설정한 processing time에 따라서
메모리 할당이나 system call(_findfirst)을 반복한다.
동기로 파일을 열고 읽기를 요청한 후 대기한다.
해당 파일에 대한 읽기가 완료되면 파일을 생성하면서 설정한 processing time에 따라서 메모리 할당이나 system call(_findfirst)을 반복한다.