2011-01-15 4 views
1

Erlang의 멋진 세상을 여행하면서 그 아름다움을 알았지 만 더 중요한 것은 속도를 느낍니다. Erlang은 가벼운 프로세스를 생성하는 데 너무 뛰어나므로 다른 프로세스를 감싸는 래퍼로 사용하는 것이 합리적일까요?Erlang을 사용하여 여러 개의 외부 프로세스를 생성합니다.

예를 들어, 나는 rspec을 사용하여 루비에 대한 테스트를 작성합니다. 모두가 아무런 문제없이 독립적으로 실행할 수있는 10,000 개의 테스트가 있다고 가정 해보십시오. Erlang을 사용하여 rspec을 10,000 개 생성하고 각 테스트를 동시에 rspec과 반대로 실행하는 것이 합리적입니까? 아니면 그냥 완전히 우스운 아이디어일까요?

답변

6

erlang 프로세스를 OS 프로세스와 혼동하고 있습니다. erlang VM은 erlang 프로그램을 해석하고 실행하는 OS 프로세스에서 실행됩니다 (빔 파일로 컴파일 됨). erlang 프로그램이 spawn 또는 spawn_link을 호출하면 VM은 내부 VM 스케줄러에 의해 실행될 내부 프로세스를 만듭니다. OS는 이러한 프로세스에 대해 아무 것도 모릅니다.

그러나 erlang 프로그램이 포트를 생성하면 (예 : 루비 인터프리터와 같은 외부 프로그램을 실행하는 일반적인 방법) VM 외부에 새로운 OS 프로세스가 생성됩니다. 외부 프로세스는 표준 입력 출력을 사용하여 VM과 통신합니다. 시스템에서 프로세스를 보면, 하나의 빔 프로세스 (erlang VM)와 하나의 루비 프로세스가 있음을 알 수 있습니다. 얼랑 VM에서

그래서 시작 OS 프로세스는 @elmt 그 있던 경우에 차이를 만들 것입니다 무엇

+0

은 (쉘 스크립트에서, 손으로 등) 다른 방법으로이를 실행에 비해 어떤 차이를하지 않습니다 10000 테스트는 Erlang 코드로 작성되었으며 다른 OS 프로세스없이 Erlang 프로세스로 실행할 수 있습니다. – ndim

+0

참. 그러나이 경우 @elmt는 루비를 테스트하려고하기 때문에 불가능합니다. –

+0

의미가 있습니다. 나는 나의 무지에 대해 사과한다, 바로 지금 나의 발을 erlang에서 축축하게한다. – elmt

2

나는 rspecs가 헤비급 프로세스 인 것으로 추측하고 있습니다.이 경우 rlpec는 Erlang 프로세스에서 "랩핑"되어도 10,000 개가 무릎을 꿇을 것입니다. Erlang의 프로세스는 OS의 의미에서 진정한 프로세스가 아니며 "마법의"속성으로 정상적인 OS 프로세스를 침범 할 수 없습니다. 그들은 OS에 프로세스를 알리라고 요청합니다.

관련 문제