[질문] perl로 스크립트를 만드는 중인데요.

sam의 이미지

다름이 아니라

아래 부분에서요.

while( tell(LDIC) < $l_offset_e) {
    read(LDIC, $buf, 8);
    ($offset, $len) = unpack("i l", $buf);
    read(LDIC, $word, $len);
    $wlist{$word} = $offset;
}

이 부분이 10만번 정도 루프를 도는데요...
좀더 시간을 단축시킬 방법이 없을까해서 고민중입니다.
아니면 이부분에서 어느부분이 가장 시간을 많이 잡아먹는지
알고싶습니다. ' ' )a

mushim의 이미지

DISK I/O 특성을 고려할때, 한번에 많은 데이타를 읽어서 I/O 요청 회수를 줄이는게 중요합니다. (물론 메모리의 여유가 있어야 겠죠.)

따라서, 버퍼를 크게 잡아서 한번에 많이 읽도록 하세요.

cjh의 이미지

read() 대신 sysread()같은걸 사용해 보시지요.

perldoc -f sysread

--
익스펙토 페트로눔

mushim의 이미지

Quote:
read() 대신 sysread()같은걸 사용해 보시지요.

sysread 는 system 호출인 read(2) 를 바로 호출하는 함수인데,

이게 어떻게 성능 향상에 도움이 되죠.

오히려 버퍼를 이용한 read 함수가 더 빠르지 않나요?

cdpark의 이미지

LDIC을 DB에 넣어야 할 듯 싶은데요? 아무리 빨라도 10만번의 I/O라면...