멀티 쓰레드 파일 읽기
글쓴이: barami / 작성시간: 일, 2012/04/01 - 1:48오후
대용량 텍스트 파일을(수백 MB~그이상)
10등분하여 쓰레드로 read하면서 검색을 하려합니다
대신 부모가 open해서 공용 전역변수 fd를 사용해야고 자식은 변경할수 없어야 합니다.
그래서 자식 지역변수에 fd 복사해서 사용해서 구현하였습니다.
그런데 쓰레드들이 돌면서 제가 원하는 위치에서 찾질 않고 뒤죽박죽이 되는거 같습니다.
원인과 해결책은 무엇인가요?
몇시간째 계속 이것저것 검색해보고 바꿔보는데 잘 되질 않습니다.
Forums:
많은 스레드에서 하나의 파일 디스크립터를 이용해서
많은 스레드에서 하나의 파일 디스크립터를 이용해서 데이터를 읽어대면
자신이 원하는 데이터를 얻기 힘듭니다.
read함수를 보시면 어디서부터 읽으라는 것을 지정하는게 없고 얼마만큼 읽어라는
것만 있는것을 보실 수 있습니다.
mmap을 사용 하시면 될것입니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
숙제인가요?
숙제라면... semaphore나 conditional variable 같은 거 사용해서... 쓰레드 1번이 읽고 2번에게 "읽어도 돼"라고 신호를 보내면 그때 2번이 읽고 그다음에 3번에게 "읽어도 돼"라고 신호를 보내고... 하면 되겠네요.
숙제가 아니라면, 다른 방법을 강구하세요. 파일 하나를 쓰레드 10개가 동시에 읽는 건 완전 삽질입니다. 쓰레드 하나가 읽는 것보다 확실하게 느려질 거라는 걸 보장할 수 있습니다. -_-
그런 방식이면
쓰레드 하나가 읽는거와 전혀 차이가 없는 것 아닌가요?
만약 저라면 이렇게 구현하겠습니다. 각 쓰레드별로
만약 저라면 이렇게 구현하겠습니다.
각 쓰레드별로 자신의 구간을 정하여
fd 는 전역변수를 사용하되 사용할 때에는 lock 을 걸며
fseek 을 이용하여 자기의 다음 읽을 구간으로 이동후 읽는다.
모든 쓰레드가 같은 파일포인트를 쓰되, 다른 구간을 읽을려면 당장 떠오르는 방법은 이 방법 이군요..
댓글 달기