파이널과 펄 솔루션을 와이드 파인더와 비교해보십시오.


8

O’Rourke's Perl solutionLundh's Python solution으로 비교해 주시면 감사하겠습니다. Perl이 무슨 일이 일어나고 있는지 충분히 이해할 수 있을지 모르겠다. 좀 더 구체적으로 말하자면 Perl 버전 3x의 이점을 얻었는지 알고 싶습니다. 알고리즘의 우월성, C 확장의 품질, 다른 요소는 무엇입니까?

Wide Finder: Results

5

펄 심하게 텍스트 프로세싱을 위해 최적화된다. 정확한 차이점을 말하기는 너무나 많은 요소가 있습니다. 텍스트는 내부적으로 완전히 다르게 표현됩니다 (utf-8 대 utf-16/utf-32). 정규식 엔진도 완전히 다릅니다. 파이썬의 정규 표현 엔진은 맞춤형 엔진이며 perl만큼 많이 사용되지는 않습니다. 기본적으로 "언어의 핵심"인 Perl과는 대조적으로 개발자가 거의 없습니다 (저는 거의 유지 보수가되지 않았다고 생각합니다).

결국 Perl은 텍스트 처리 언어입니다.

+1

샘플 로그는 알고있는 한 ASCII이며 파이썬 버전은 유니 코드 변환없이 바이트 문자열을 사용합니다. 그래서 저는 여기에 "utf-8 대 utf-16"이 없다고 생각합니다. 23 sep. 082008-09-23 22:33:36

+1

나는 constantin에 동의한다. 나는 유니 코드와 관련이 있는지 보지 못한다. 23 sep. 082008-09-23 22:42:23


10

더 나은 정규식 구현은 이야기의 한 부분입니다. Perl 구현이 왜 더 잘 확장되는지 설명 할 수는 없습니다. 차이는 프로세서가 많을수록 커집니다. 어떤 이유로 파이썬 구현에 문제가 있습니다.


1

Perl 구현은 mmap 시스템 호출을 사용합니다. 그 호출은 프로그램에 대한 메모리 나 버퍼의 정상적인 세그먼트 인 것으로 보이는 포인터를 만드는 것입니다. 파일 내용을 메모리 영역에 매핑합니다. 이 파일을 정상적인 파일 IO (읽기)와 비교할 때 성능상의 이점이 있습니다. 하나는 데이터에 액세스하는 데 필요한 사용자 공간 라이브러리 호출이 없으며, 다른 한편으로 복사 작업이 덜 필요하다는 것입니다 (예 : 커널 및 사용자 공간).

Perl의 문자열과 정규 표현식은 8 비트 바이트 기반이므로 (예 : Java의 경우 utf16과 반대 됨) Perl의 기본 '문자 유형'은 mmapped 파일의 인코딩과 동일합니다.

일반 표현식 엔진이 mmap 기반 변수에서 작동하면 Perl의 IO 기능이나 libc의 IO 기능을 거치지 않고 mamped 메모리 영역을 통해 파일 데이터에 직접 액세스합니다.

mmap은 일반적인 Python IO 라이브러리를 사용하는 Python 버전과 성능 차이에 대한 책임이 있습니다. 줄 바꿈을 찾는 오버 헤드가 추가적으로 발생합니다.

또한 Perl 프로그램은 처리를 병렬 처리하기 위해 -J를 지원합니다. 여기서 oepen "- |" 부모의 파일 핸들이 자식의 stdout에있는 fork()를 발생시킵니다. 자식 프로세스는 결과를 stdout에 직렬화하고 부모 프로세스는 비 직렬화하여 결과를 조정하고 요약합니다.

+1

Python 버전은 mmap도 사용합니다. 파이썬의 정규식은 mmap에서도 직접 작동합니다. 25 sep. 082008-09-25 20:47:41


0

펄 구현은 mmap 시스템 호출을 사용합니다.

이것은. 버퍼 복사를 피하고 비동기 I/O를 제공합니다.

+1

Python 버전도 mmap 기반입니다. 하지만 "mmap이 Perl 버전 용 비동기 I/O를 제공합니다"에 대해 자세히 설명 할 수 있습니까? 02 dec. 092009-12-02 12:47:01


3

MCE (Many-core Engine)가 Perl 용으로 출시되었습니다. MCE는 8 명의 작업자 (콜드 캐시)가있는 디스크에서 직접 읽을 때도 상당히 잘 수행됩니다. wf_mmap와 비교하십시오. MCE는 입력 데이터를 읽을 때 은행 대기열 모델을 따른다. 이미지 폴더 아래에 슬라이드가 있는지 확인하십시오.

소스 코드가 http://code.google.com/p/many-core-engine-perl/

에서 호스팅되는 펄 문서/https://metacpan.org/module/MCE

MCE와 와이드 파인더의 구현 예/tbray에서 제공에서 읽을 수 있습니다

https://metacpan.org/source/MARIOROY/MCE-1.514/examples/tbray/

MCE를 즐기십시오.

Script....: baseline1 baseline2 wf_mce1 wf_mce2 wf_mce3 wf_mmap 
Cold cache:  1.674  1.370 1.252 1.182 1.174 3.056 
Warm cache:  1.236  0.923 0.277 0.106 0.098 0.092