고정 된 청크 8192 바이트로 제공되는 큰 바이너리 파일 (4 ~ 6GB)을 읽거나 파싱해야합니다. 현재 솔루션에는 SPMC (Single Producer Multiple Consumer) 패턴을 사용하여 파일 청크를 스트리밍하는 작업이 포함됩니다.멀티 스레드 파일 읽기
편집
파일 크기 = N * 8192 바이트
내가 필요하고 모든이 8192 바이트의 각 무언가를하는 것입니다. 파일은 맨 아래로 한 번만 읽어야합니다.
는 (파일 크기/ X)은 독립적으로 크기, 내가 동등한 거리에서 읽을 수 X 스레드를하고 싶은이 황당 병렬 문제가되어야한다고 생각 데. 쓰레드는 서로 통신 할 필요가 전혀 없습니다.내가 같은 파일을 열고 처리하는 각각의 섹션을 추구하는 산란 X 스레드를 시도했다, 그러나,이 솔루션은 노력과 분명히보다 더 수행 HDD 기계에 의한에 문제가있는 것 SPMC 솔루션
이 방법을 SSD에서 대신 사용하면 어떤 차이가 있습니까?
아니면 전체 파일을 메모리 맵으로 매핑하고 청크를 처리하기 위해 #pragma omp parallel for
을 사용 하시겠습니까? 이 작업을 수행하기에 충분한 RAM이 필요할 것이라고 생각하십니까?
무엇을 제안하겠습니까?
파일의 구문과 형식에 대해 충분히 알지 못합니다. –
이 바이너리 파일은 N * 8192 바이트이고이 8192 바이트 각각에 대해 개별적으로 작업해야합니다. –
[여기] (http://stackoverflow.com/a/41237690/841108)에 언급 된 시스템 호출 (Linux OS라고 가정)이 도움이 될 수 있습니다. 하지만 병목 현상은 디스크 자체라고 생각합니다. 당신은 아마 너무 많은 쓰레드를 원하지 않을 것입니다. (그래서 * X *는 4에서 10이 될 것이고 많지는 않습니다.) 벤치마킹해야합니다. 하드웨어 디스크가 한 번에 단 하나의 요청 만 처리 할 수 있기 때문에 당황스럽지 않은 병렬 문제는 아닙니다. –