2016-11-03 3 views
0

디스크에서 여러 개의 큰 페이지를 읽고 여러 범위 검색을 수행하는 프로그램을 개발 중입니다. 프로그램은 여러 페이지에서 읽은 다음 쿼리 결과를 출력 페이지에 씁니다. 출력의 순서를 유지해야 입력 순서와 일치합니다.주 기능이 디스크에서 읽는 프로그램을 멀티 스레드하는 것이 좋은 생각입니까?

그러나 프로그램이 여러 번 읽은 후 매우 느려지므로 한 번에 여러 검색을 실행하기 위해 다중 스레드 프로그램을 사용하려고합니다. 나는 4 코어 리눅스 머신을 가지고 있으며, 두 개의 프로그램 스레드를 갖고 싶다. 좋은 생각입니까? 출력 파일의 순서를 어떻게 유지할 수 있습니까? 잠금이 도움이되지 않습니다. 왜냐하면 어떤 스레드가 먼저 완료 될지 알지 못하기 때문입니다.

어떻게하면됩니까?

감사

업데이트

: 이것은 SQL 라이브러리의 어떤 종류를 사용하지 않고 수행해야합니다.

+1

프로그램이 파일을 읽는 데 더 많은 시간을 들여야합니까? 데이터를 처리하고 있습니까? 독서를한다면, 다중 코어가 도움이되지 않습니다. 여러 디스크 또는 SSD를 가져 오는 것이 도움이 될 수 있습니다. – Joni

+0

읽기가 문제입니다. – Salma

답변

0

이 경우에는 스레딩이 좋습니다. 결과에서 mantain을 사용하려면 mapReduce 방식을 사용합니다. Qt에서 qtConcurrent 모듈을 사용하여 도움을 얻을 수 있습니다. 아이디어는 하나 이상의 페이지를 가져 와서 검색 결과를 목록으로 반환하는 스레드로 전달한다는 것입니다. 모든 스레드/작업은 고유 한 색인을 가지므로 결국 인덱스 2 인 스레드에서 반환 된 목록은 인덱스 1 인 스레드가 반환 한 목록 뒤에 배치됩니다.

관련 문제