나는 멀티 스레드 응용 프로그램을 작성 중이며 지금은이 아이디어를 가지고 있습니다. 나는 FILE*[n]
을 가지고 있는데, n
은 런타임에 결정된 숫자입니다. 독서를 위해 n 개의 파일을 모두 열면 여러 스레드가 읽을 수 있습니다. 각 파일의 데이터에 대한 계산은 동일하다. 즉, 직렬 실행이 가정되면 각 파일은 동일한 시간 동안 메모리에 남아있게된다.C에서 파일에 쓰는 동안 디스크 액세스 횟수 줄이기
각 파일은 임의로 커질 수 있으므로 메모리에로드 할 수 있다고 가정해서는 안됩니다.
그런 시나리오에서 나는 발생하는 디스크 IO의 수를 줄이려고합니다. 어떤 시나리오가 구현 된 방법에 대한 아이디어가 거의 없기 때문에 누군가이 시나리오를위한 공유 메모리 모델을 제안 할 수 있다면 좋을 것입니다. 다른 말로하면 나는 단지 그러한 시나리오를 구현하는 가장 효율적인 모델이 무엇인지 알고 싶다. C
을 사용하고 있습니다.
EDIT : 더 자세한 시나리오.
실제 문제는 n 파일에 포함 된 데이터에 n 블룸 필터가 있고 파일의 모든 요소가 해당 블룸 필터에 삽입되면 회원 테스트를해야합니다. 멤버쉽 테스트는 데이터 파일의 읽기 전용 프로세스이기 때문에 여러 스레드에서 파일을 읽을 수 있으며이 문제는 쉽게 병렬 처리 할 수 있습니다. 이제 데이터가있는 파일의 수는 꽤 큽니다 (약 20k이고 파일 수는 블룸 필터의 수와 같습니다) 그래서 블룸 필터 테스트를 위해 스레드를 생성하도록 선택합니다. 즉 각 블룸 필터는 자체 스레드를 가지며 다른 모든 파일을 하나씩 읽은 다음 블룸 필터에 대한 데이터 멤버십을 테스트합니다. 나는 그런 경우에 디스크 IO를 최소화하기를 원합니다.
어떤 플랫폼에 대해 이야기하고 있습니까? Linux를 사용하는 경우 가장 쉬운 방법은 메모리 매핑 파일로 열어서 OS가 처리하도록하는 것입니다. (나는 Windows에 상응하는 것이 있다고 확신한다.) –
나는 리눅스를 사용하고있다. 좀 더 설명해 주시겠습니까 –
공유 메모리를 통해 공유하려고하는 것이 확실하지 않습니까? 메모리 맵핑 된 파일을 생각하고 있다면, IO는 필연적으로 IO를 줄이지 않습니다 (여전히 읽어야 할 모든 것을 읽어야합니다). IO가 문제라고 생각하는 이유는 무엇입니까? 의미있는 제안을하기에 충분한 세부 사항이 없다고 생각합니다 ... 질문 제목에 파일 작성에 대한 언급이 있지만 본문에 파일이 쓰여지는 방법 및 위치에 대한 언급이 없습니다. –
John3136