나는 폴더 구조를 재귀 적으로 검색해야하는 프로그램을 작성 중이며 여러 스레드와 병렬로이를 수행하려고합니다.병렬로 큐를 처리하는 좋은 전략은 무엇입니까?
처음에는 큐에 루트 디렉토리를 추가 한 다음 디렉토리를 대기열에서 제외하고 하위 디렉토리를 대기열에 추가하는 등 대기열이 비어있을 때까지 이미 간단한 동기화 방법을 작성했습니다. 내 대기열에 ConcurrentQueue<T>
을 사용할 것이지만 이미 내 루프가 너무 일찍 중단된다는 것을 깨달았습니다. 첫 번째 스레드는 루트 디렉토리를 대기열에서 제외하고 다른 모든 스레드는 대기열이 비어있는 것을보고 즉시 종료하여 첫 번째 스레드를 실행중인 유일한 스레드로 남겨 둡니다. 큐가 비어있을 때까지 각 스레드를 반복하고, 다른 스레드가 큐를 대기열에 추가 할 때까지 기다렸다가 계속 진행합니다. 모든 스레드가 루프의 끝에 도달 할 때까지 모든 스레드가 종료 될 수 있도록 일종의 검사 점이 필요합니다. 그러나 실제로 더 이상의 디렉터리가 없을 때 교착 상태없이이 작업을 수행하는 가장 좋은 방법은 아닙니다. 방법.
폴더 구조에서 무엇을 검색 할 수 있습니까? fileName 또는 파일 안의 무엇인가? 아니면 다른 것? 나는 이것이 적절한 알고리즘으로 당신을 도우는 것이 중요하다고 생각합니다. –
성능면에서 이점이 있습니까? 수천 개의 파일을 읽는 프로세스에서 비슷한 점을 살펴본 결과 제어 성능 요소가 디스크 IO이고 병렬 스레드에서의 처리가 성능에 큰 영향을 미치지 않는다는 것을 알게되었습니다. – ScruffyDuck
정규식에 대해 디렉토리 이름 또는 파일 이름과 일치하는 결과를 반환합니다. 파일 내부의 내용과 일치하지 않습니다. 파일 속성을 확인하기 위해 확장 할 수도 있지만 그게 전부입니다. – dlras2