당신은 하나의 파일에 병렬 쓰기를 수행하려는 문제의 번호로 실행하는 것입니다.
w +는 쓰기 작업 이전에 기존 파일을 길이 0으로 절단하거나 새 파일을 만듭니다. 어떻게 병렬 파일 포인터 작성을 조정할 예정입니까?
글쓴이가 여러 명인 경우 쓰기를 동기화해야하며 순차 쓰기에 비해 속도면에서 유리합니다. 사실, 단일 전용 순차 쓰기 스레드보다 동기화 오버 헤드로 인해 속도가 느려질 수 있습니다.
질문에 대해 조금 더 생각해보십시오. 거대한 배열이 있다면 5 억 개의 정수를 말하면서이 배열을 영구 파일에 읽고 쓸 수있는 가장 빠른 방법이 정말로 필요했습니다. 배열을 할당 할 수있는 전용 스레드의 수로 나눌 수 있고, 각 세그먼트를 별도의 파일에 쓸 수 있습니다. 그런 다음이 데이터를 병렬로 읽음으로써이 배열을 배열로 다시 읽을 수 있습니다. 이 경우 Parallel For 유형의 패턴을 사용할 수 있으며 단일 파일에 대한 동기화 잠금 오버 헤드를 피할 수 있습니다.
그래서 내가 준 예제에서는 4 개의 스레드가있는 경우 각 스레드가 자체 분기를 작성하거나 별도의 파일에서 읽고 쓰는 배열 분기를 나눕니다.
참고 : 모든 파일이 동일한 디스크 드라이브에있는 경우 디스크의 다른 부분에서 여러 개의 동시 읽기/쓰기 작업을 수행하면 일부 I/O 속도가 느려질 수 있습니다. 이 효과는 각 파일을 다른 디스크/서버에 저장할 수있는 경우 중재 될 수 있습니다.
물론 _text 파일 _은 본질적으로 순차적 인 데이터 구조라는 것을 알고 있습니까? – AlexP
벡터에서 순서를 유지하려면 가능하지 않을 것으로 예상됩니다 (적어도 제안한 코드 행에는 해당되지 않음). 아직도 스토리지에 글을 쓰는 것은 내가 알고있는 아키텍처에 대한 순차적 인 프로세스입니다. 그래도 내가 틀렸다고 입증되면 좋겠다. –
별도의 쓰레드 나 포크 (프로세스)에서 쓰는 경우에는 각 라인이 원자적인 방식으로 작성되었는지 확인하기 위해 '뮤텍스 (mutex)'를 사용할 수 있습니다. 그러나 각 쓰기 사이에 수십 또는 수백 개의 작업을 수행하지 않는 한 뮤텍스가 사용 가능할 때까지 기다리는 데 시간을 할애해야합니다. 조숙 한 최적화를 피하는 것이 좋습니다. – KevinDTimm