나는 이것에 관해 어떤 조언을 구상 중이었고 링크를 발견했다. 가장 확실한 것은 this one 이었지만 궁극적으로 궁금한 점은 내 코드가 얼마나 잘 구현되는지입니다.C에서 여러 스레드에서 동일한 파일 읽기 #
기본적으로 두 가지 클래스가 있습니다. 하나는 변환기이고 다른 하나는 내가 같은 시간에 실행되어야하는 스레드 나에게 말한다 속성의 ThreadNumber을 가지고이 변환기 클래스의 인스턴스를 생성 (이이 사용자로부터 읽기) ConverterThread
입니다 이 응용 프로그램은 멀티 CPU 시스템 (물리적으로 8 cpu와 같은)에서 사용되므로 가져 오기 속도가 빨라질 것입니다.
변환기 인스턴스는 100MB에서 800MB까지의 파일을 읽습니다. 이 파일은 데이터베이스와 같은 다른 대상으로 가져온 탭 구분 값 레코드입니다.
ConverterThread 클래스는 스레드 (새 Thread (ConverterThread.StartThread)) 내에서 단순히 실행되며 이벤트 알림이 있으므로 작업이 완료되면 변환기 클래스에 알릴 수 있으며이 모든 스레드에 대한 진행률을 요약 할 수 있습니다. 이러한 레코드의 수와 얼마나 많은 바이트가 읽혔는지 사용자 (예 : GUI)에 알립니다.
파일에 대해 임의의 오류가 발생하거나 진행률 (백분율)의 합계가 100 %를 초과하여 가능한 것이 아니기 때문에 문제가있는 것처럼 보입니다. 스레드가 잘 관리되지 않고 이벤트에 의해 반환 된 정보가 잘못 되었기 때문에 발생합니다 (하나의 스레드에서 다른 스레드로 "이동"하기 때문에)
스레드의 구현에 대한 조언이 있습니까? 이것을 성취합니까?
미리 감사드립니다.
여러 스레드를 사용하는 복잡성/어려움이 속도 이점보다 중요 할 것이라고 말할 때 다른 포스터의 감정에 분명히 동의합니다. –
스레드를 추가하면 읽기 성능이 향상 될 수 있습니다. 나는 이것을 벤치마킹했다. http://stackoverflow.com/questions/1033065/will-using-multiple-threads-with-a-randomaccessfile-help-performance/1254378#1254378을 참조하십시오. –
좋아, 그래서 마침내 큰 파일을 읽고 사용자가 스레드를 4 개의 다른 파일 에서이 큰 파일을 나눕니다 4 스레드를 설정하면 그래서 구성된 많은 파일을 만드는 하나의 스레드를 사용하여 끝났다. 쓰레드가 끝나자 마자 나는 4 개의 쓰레드를 만들고 각각은 다른 파일을 읽고 각 레코드를 처리한다. 나는 이것을 벤치마킹하지 않았지만 당신에게 알려주겠다. 모든 답변을 주셔서 감사합니다. –