동시 또는 순차 쓰기 작업 - 속도 측면에서 중요합니까?동시 또는 순차 쓰기 - 속도 측면에서 중요합니까?
멀티 코어 프로세서의 경우 속도를 높이기 위해 멀티 스레드를 사용하는 모든 파일 쓰기 작업을 병렬화하는 것이 합리적입니까? 물론 모든 쓰기 작업은 독립적입니다.
동시 또는 순차 쓰기 작업 - 속도 측면에서 중요합니까?동시 또는 순차 쓰기 - 속도 측면에서 중요합니까?
멀티 코어 프로세서의 경우 속도를 높이기 위해 멀티 스레드를 사용하는 모든 파일 쓰기 작업을 병렬화하는 것이 합리적입니까? 물론 모든 쓰기 작업은 독립적입니다.
디스크와 컨트롤러에 따라 다릅니다. TCQ/NCQ가 있습니까? RAID인가? 그렇다면 다소 이해할 수 있습니다. 하나의 일반 SATA 디스크 (NCQ 제외)를 사용하면 그렇지 않습니다.
가장 간단한 코드를 먼저 작성하고 목표 환경 인을 가지고 의 성능이 충분한 지 확인하십시오.
다음으로 가장 간단한 올바른 코드가 충분히 빠르지 않으면 더 빠른 수행 방법을 시도하는 것이 좋습니다 (예 : 다른 디스크, 운영 체제 버전, CPU, 드라이버 등). IO. 같음 일 경우, 다른 디스크에 쓰고 있지만 그렇지 않은 경우 쓰기 작업을 병렬화하는 것이 좋습니다. 그것은 단지 완전한 추측 일뿐입니다.
우연히 우연히도 관련 상황을 곧 벤치마킹 할 계획입니다. 나는 수행 할 테스트를 설명하는 blog post을 가지고 있으며, 내가 가지고있을 때 그 결과에 대한 링크가있는 항목을 업데이트 할 것입니다. 당신이 묘사하고있는 것과 완전히 같지는 않지만 관심이있을만큼 가까울 정도입니다.
일반적으로 아니오.
현재 물리적 디스크 쓰기가 병 목으로되어 있으며 대부분의 경우 다소 순차적입니다. 병렬 처리는 쓸모가 없으므로 에 악영향을 끼치며에 악영향을 미칩니다. 순차적 읽기 및 쓰기는 대부분의 경우 인터리빙보다 성능이 크게 향상됩니다.
디스크 별 병렬 처리 (TCQ 및 NCQ)는 다른 클라이언트가 동시에 디스크의 다른 섹션에서 데이터를 요청할 때 자연스럽게 필요한 검색을 줄임으로써 주로 작동합니다. 처음에 이러한 추구를 피할 수 있다면, 더 나아질 수 있습니다.
일부 시나리오 - RAID 1, JBOD 또는 다른 데이터 스트림이 다소 느리게 도착하는 경우 - 올바른 스케줄링으로 처리량을 향상시킬 수 있지만 하드웨어를 직접 알고 지식을 습득해야하며 재미가 없어도됩니다.
음. 디스크에 명령 대기열이 있고 순서가 바뀌면 실제로 헤드가 왼쪽 극단에서 오른쪽 극단까지 스윙하여 데이터를 수집합니다. 이 상황에서의 병렬 쓰기는 실제 탐색 오버 헤드가 없으므로 처리량을 상당히 향상시킵니다. –
응용 프로그램에서 데이터를 준비하는 데 상당한 시간이 필요한 경우에만. 일반적으로 디스크에 물리적으로 기록 할 경우 병목 현상이 10 배 이상 발생하므로 헤드를 돌리면 속도가 빨라집니다. – peterchen
하나의 파일에 쓰는 것에 대해 이야기하고 있다면 대답은 아니오입니다. 모든 프로세스 또는 스레드는 OS에서 파일 쓰기를 위해 파일에 대한 잠금을 획득해야하므로 하나의 파일에 쓰기를 병렬화 할 수 없습니다.
기타 하드웨어 컨트롤러 및 스토리지 유형, OS 커널 및 파일 시스템 구현에 따라 달라집니다.
나는 당신을 투표하지는 않았지만 물론 하나의 파일에 쓰기를 병렬 처리 할 수 있습니다. 파일의 다른 부분에 쓰는 다른 스레드를 가지고 있으면됩니다. – Eddie
기술적으로 파일을 mmap하고 여러 스레드에서 쓸 수 있지만 디스크에 병목 현상이 계속 발생할 수 있습니다.
I/O 처리량을 최대화해야하는 경우 환경에서 지원하는 비동기 입출력을 조사하는 것이 좋습니다.
이것은 간단한 질문이지만 대답은 실제로 매우 복잡 할 수 있습니다. Les은 몇 가지 가정하에 시나리오의 범위를 좁히려고합니다. OS는 Windows이고, 실제로는 독립적 인 비교적 많은 수의 쓰기가 있습니다.
최악의 경우 병렬 ATA 컨트롤러의 평범한 구형 디스크보다 느립니다. 속도가 느려집니다.
최상의 경우 OS는 쓰기를 매우 효율적으로 스케줄 할 수 있습니다. 스핀들이 많은 저장 시스템 또는 NCQ를 지원하는 디스크의 경우에 해당됩니다.
여기서 기억해야 할 핵심 사항은 디스크 I/O (일반적으로)가 CPU 바운드가 아니므로 멀티 코어를 사용하지 않는 것이 도움이되지 않는다는 점입니다. 그것은 단지 삶을 복잡하게 만들 것입니다.
기록을 순서대로 지정하면 파일에서 순차적으로 (순차적으로) 또는 디스크의 순차적으로 정렬하여 도울 수 있습니다.
이것은 모두 사실이지만 질문과의 관련성을 알 수 없습니다. 아마도 OP는 이미 가장 단순한 코드를 먼저 알고 있지만 코드 관점에서 컴퓨터 아키텍처에 대한 일반적인 지식을 수집하려고합니다. – JasonSmith
질문은 복잡한 기술을 사용하는 것이 합리적인지 여부를 묻습니다. 내 대답은 본질적으로 "귀하의 앱이 이미 충분히 성공적으로 수행되면 이해가되지 않습니다"라고 생각합니다. OP는 그가 성능에 문제가 있음을 확실히 나타내지 못했습니다. –