2015-02-03 3 views
0

서브 모듈을 호출하는 perl 코드를 수천만 번 작성합니다. 서브 모듈은 계산 집약적이며 런타임이 매우 느립니다. 서브 모듈이하는 일을 정확히 수행하는 C++ 프로그램을 발견했으며 서브 모듈을 C++ 프로그램으로 대체하고 싶습니다. 프로그램 인터페이스를위한 XS 코드를 작성해야하는지 궁금합니다. Perl 코드에서 "system"명령을 사용하여 C++ 프로그램을 직접 호출하기 위해 성능을 많이 저하 시키는가? 감사합니다.Perl 코드에서 C++ 프로그램 호출

+0

확인 : https://metacpan.org/pod/Inline:CPP – jm666

+0

@ jm666 의견을 보내 주셔서 감사합니다. 이 모듈은 Perl에 C 코드를 임베드하기위한 노력을 줄이는 것으로 보입니다. XS를 사용해야하는 경우 유용합니다. 그러나, 거기에 내 질문에 대한 답변을 찾을 수 없습니다 ... – user4147776

답변

1

외부 프로그램을 시작하면 항상 함수 호출을 만드는 것보다 속도가 느려집니다. 속도에 신경을 쓰면 "수천만 번"프로그램을 시작하는 것이 문제가되지 않습니다.

수천만 번 실행되는 루프가 외부 프로그램 내부에 있으면 한 번만 실행해도됩니다. 그러나 이제는 외부 프로그램에 수천만 개의 데이터를 가져 오는 방법과 결과를 다시 얻는 방법과 같은 또 다른 문제가 있습니다. 외부 프로그램이기 때문에 텍스트 형식으로 데이터를 전달해야합니다. 즉, 스크립트가 데이터를 텍스트로 변환하고 외부 프로그램으로 전달해야합니다. 외부 프로그램은 그것을 파싱하여 원래의 표현으로 변환하고, 계산을 수행하고, 결과를 텍스트로 변환하여 리턴해야합니다. 스크립트는 결과를 구문 분석해야합니다.

system은 어쨌든이 도구에 적합하지 않습니다. 출력보다 프로그램을 실행하는 데 가장 적합합니다 (예 : rm -rf /). 프로그램의 결과물을 읽고 싶다면 백틱 (`` a.k.a. qx{})이나 파이핑을 원할 수도 있습니다 (perldoc perlipc의 "open() IPC 사용하기"참조).

+0

외부 프로그램이 대화 형이고 루프가 perl 코드에있는 경우 루프 앞에 한 번 'open'을 사용하고 각 반복에 대한 지침/데이터를 전달할 가치가 있습니다 게다가. 내가 맞습니까? – rubikonx9

+0

고려해야 할 가치가 있지만 양방향 의사 소통에는 문제가 있습니다. "perldoc perlipc"의 "다른 프로세스와의 양방향 통신"을 참조하십시오. – Bulletmagnet

+0

@Bulletmagnet 답변 해 주셔서 감사합니다. 나는 충분한 평판이 없기 때문에 나는 당신의 대답을 투표 할 수 없다는 점에 유감이다. – user4147776

관련 문제