2010-11-18 7 views
1

Perl에서 여러 컴퓨터에 걸쳐 스레드를 실행할 수 있는지 궁금합니다. 클러스터 환경에서 작업 중이며 병렬로 일부 프로세스를 실행해야하지만 MPI를 사용할 수 없습니다. 스레딩을 여러 컴퓨터에서 사용할 수없는 경우 비슷한 모듈을 필요로하지 않고 특별한 모듈을 필요로하지 않는 다른 대안이 있습니까?Perl - 여러 컴퓨터에서 스레드를 실행할 수 있습니까?

+1

... 왜 이것을 사용 하시겠습니까? 그것은 직업에 대한 잘못된 도구처럼 들립니다. –

+0

PVM 보셨습니까? – tchrist

답변

1

1 주일 전 또는 2 일 전에 GNU parallel에 마주 쳤지 만, 별도의 컴퓨터를 거치지 않아서 정기적 인 프로그램이 여러 코어를 이용할 수있게하여 시간을 절약하는 데 도움이됩니다. 당신이하고있는 모든 것을 빠르게 할 수 있습니다.

4

Perl의 스레드 (및 분기)는 상위 스레드/프로세스와 동일한 컴퓨터에 연결되므로 컴퓨터 간 스레드/분기가 없습니다. 즉 AnyEvent::MP/Coro::MP 개의 모듈과 AnyEvent 비동기 이벤트 루프 프레임 워크에 대한 메시지 전달 확장자와 Coro 공동 루틴, 협업 스레딩 프레임 워크를 각각 사용할 수 있습니다. 하나 또는 여러 개의 다른 작업을 수행하는 노드 네트워크를 만들 수 있습니다. 기계. 자세한 내용은 AnyEvent::MP::Intro을 참조하십시오.

특별 모듈을 필요로하지 않는 대안 (perl 배포판에없는 모듈을 의미하는 것)을 사용하는 경우 작업에 대한 데몬을 작성하고 TCP 또는 UDP를 통해 통신하게 할 수 있습니다. 그 이상이면 Perl과 함께 설치되지 않지만 CPAN에서 사용할 수있는 최소한의 모듈이 필요할 것입니다.

+0

나는'rfork ($ hostname)'함수를 한 번 작성했지만 대상 머신이 같은 하드웨어 인 것을 포함하여 모든 요구 사항을 가지고있다. 그러나 완벽한'fork()'의미를 포함하여 모든 것을 올바르게 처리했습니다. 그것은 Perl이 아니라 C에있었습니다. – tchrist

+0

Plan 9와 일부 BSD에는 이미 rfork 기능이 있습니다 ('원격 포크'가 아님).포크 의미론에 관해서는 호스트 경계를 넘어서 파일 디스크립터와 포인터를 어떻게 공유 할 지 모르겠지만, 두 호스트 사이에서 프락시 한 각 rfork에 대한 실제 포크를 만들었습니까? – MkV

2

멀티 머신 작업 관리자 큐 Gearman을 살펴보십시오. 에 특수 모듈이 필요합니다. 나는 여기에서 "만약을 대비하여"실제로 추가 모듈/인프라를 사용할 수 있다고 대답했다.

Perl 바인딩, Gearman::XS이 있습니다. 특정 작업이 요청자 또는 작업자 프로세스가 여러 시스템에있을 수있는 환경에서 수행되기를 원하는 프로젝트에서 성공적으로 사용합니다. 하나의 컴퓨터와 하나의 요청자 (예 : 모든 작업자가 분석 한 페이지의 모든 링크를 요청하지만 결과를 계속 관리하려고하는 특정 웹 스크래퍼)의 여러 작업자 프로세스에도 잘 작동합니다.

작동 방식은 분산 된 방식으로 수행하려는 작업을 수행하는 여러 가지 서브 루틴이있는 "작업자"Perl 프로그램을 만드는 것입니다. 원하는 작업자가 원하는대로 여러 번 작업자 프로그램을 시작하고 하나 또는 여러 개의 마스터 기어맨 "관리자"에게 연결하게합니다. 그런 다음 요청을 수행 할 요청자 (gearman 클라이언트) Perl 프로그램을 작성하십시오. 이것은 또한 모든 기계에서 실행될 수 있으며 완료된 작업자의 특정 작업을 요청하기 위해 마스터 기어맨 관리자에게 연락합니다. 모든 작업자가 작업을 수행하며 요청자는 결과를 다시 얻습니다.

요청자가 결과가 필요하지 않지만 "그냥"해야 할 일이 필요하다면 비슷한 아키텍처를 가지고 있지만 작업자의 메시지를 다시 받기위한 기능을 제공하지 않는 TheSchwartz을보십시오. 요청자, IIRC.

1

GRID :: 기계를 확인하십시오.

관련 문제