2010-07-13 3 views
6

필자는 병렬이 궁금합니다. File.Read PLINQ/Parallel을 사용하면 더 빠를 수 있습니까? 내 코드 (닷넷 4.0) 다음과 같습니다Sequential Read보다 Parallel File.Read가 더 빠릅니까?

public static void ReadFileParallel(List<string> fileName) 
{ 
    Parallel.Foreach(fileName, file=>File.Read(file)); 
} 

public static void ReadFilePLINQ(List<string> fileName) 
{ 
    fileName.AsParallel().foreach(file=>File.Read(file)); 
} 
내가 파일 읽기는 IO가 결합되어 있다고 생각했기 때문에 나는이 물어 이유는, 그래서 병렬을하는 것은 도움이되지 않습니다

, I를 마우스 오른쪽 무엇입니까?

답변

6

에 달려 있습니다.

파일이 다른 위치, 다른 네트워크 공유 또는 다른 실제 하드 드라이브에 있다면 예, 병렬 로딩이 도움이 될 것입니다. 단일 회전하는 하드 드라이브를 사용하는 경우 병렬로 파일을 읽는 것이 이러한 병렬 읽기에서 발생할 수있는 추가 검색 시간으로 인해 성능이 크게 저하 될 수 있습니다.

파일이 SSD에있는 경우 성능이 약간 떨어질 수는 있지만 병렬로 읽는 파일의 수와 파일의 크기에 따라 다릅니다. 특정 파일 크기 임계 값 및 병렬 읽기 수에서 성능이 크게 떨어질 것이라고 생각합니다. 실험을하지 않고도 그 사실을 알기가 어렵습니다.

+1

이는 합리적인 기준입니다. 실제로, 나는 그것을 추측하기보다는 측정한다고 말하고 싶습니다. –

1

그렇게 생각 하겠지만 측정 값이 아닙니다. 파일 I/O가 특히 네트워크를 통해 중요한 지연 시간을 가질 때 병렬로 처리하면 파이프가 채워질 수 있습니다.

0

첫 번째 근사값은 파일이 다른 디스크에있는 경우 도움이되며 그렇지 않은 경우 속도가 느려집니다 (검색 시간이 늘어남).

여러 개의 코어를 사용할 수 있기 때문에 모든 파일이 캐시 된 경우 속도가 약간 빨라질 수 있습니다.

최상의 벤치 마크는 물론 벤치 마크를 실행하는 것입니다.

0

정확히 병렬 파일을하고 있지 않습니다. 읽기, 당신은 병렬로 여러 File.Reads하고 있습니다. 파일이 다른 스핀들에있는 경우 한 번에 여러 스핀들을 활용하면 처리량이 향상됩니다.

단일 스핀들을 사용하는 경우에도 각 읽기에 CPU 바인딩 처리가 이어지는 경우에도 성능이 향상 될 수 있습니다.이 경우 Tasks 개체를 훨씬 더 효율적으로 예약 할 수 있습니다. 이 경우 파일에서 데이터를로드하는 일부 작업을 수행 할 수 있고 다른 일부는 이미로드 된 데이터를 사용하여 처리량이 많은 작업을 수행 할 수 있습니다.

+0

그래,하지만 그의 파일이 같은 HDD에 있다면 그는 헤드 검색 시간에 맞을 것이고 처리량은 2 배 더 크게 줄어들 것이다. 3.5 "7200 RPM 드라이브의 평균 탐색 시간은 13-15 밀리 초이며 용량 및 선형 읽기/쓰기 속도와 달리이 수치는 지난 몇 년 동안 일관되게 나타납니다 – Soonts

+0

그 이유는" CPU-bound processing ". 하나의 쓰레드가 파일을 읽는 동안, 다른 쓰레드가 프로세싱을하고있어, 둘 다 계속 작동한다. –

0

당신은 머리에 못을 박은 것 같습니다.

병렬 처리는 일반적으로 병렬 처리 작업을 실행하기 위해 자원이 부족한 시점까지 항상 억제되지만 병렬 스레드의 양이 늘어날수록 반환되는 작업량은 줄어 듭니다.

제프 앳 우드 (Jeff Atwood)는 트위터로 흥미로운 그래프를 만들었습니다.이 글에서는 나중에 멀티 스레드 환경에서 멀티 코어 프로세서의 감소하는 수익을 보여줍니다. 이것은 정확히 동일하지 않습니다. 100 개의 하드 드라이브에 100 개의 파일이 있어도 입출력이 단일 채널로 다시 이동하여 읽기 증가가 줄어들 것이라는 생각에서 보자.

기본적으로 병렬로 실행한다는 것은 병렬 처리가 실제로 실행되는 방식을 고려하는 것이 중요하다는 것을 의미합니다.

0

까다로운 사업입니다. 잘못하면 디스크 헤드가 동시에 두 파일을 읽으려고 앞뒤로 움직입니다. 이것은 대용량 파일의 경우 특히 문제입니다.

그러나 병렬로 많은 작은 파일을 읽으면 디스크 하위 시스템이 요청한 순서와 다른 순서로 파일을 읽을 수 있기 때문에 약간의 성능 향상을 얻을 수 있습니다. 그러나 나는 실생활에서이 효과를 보지 못했다.

또한 처리 내용은 파일 읽기와 병행하여 수행 할 수 있습니다. 따라서 출고하기 전에 프로필을 작성하고 벤치마킹해야합니다.

관련 문제