2013-03-26 2 views
5

나는 얼랑 (Erlang)의 초보자입니다. 배우 모델의 디자인을 채택하고 경량 프로세스라는 개념을 이해합니다. 이것은 높은 동시 프로그래밍의 핵심입니다. 그러나 참조 투명성을 부여하는 기능 프로그래밍 패러다임도 채택합니다. 이는 할당 후에 변수를 변경할 수 없음을 의미합니다. 그래서, 비슷한 기능을 많이 볼 수 있습니다 :얼랭 (Erlang)은 많은 메모리 복사가 발생했을 때 정말 빠릅니까?

gb_trees:delete(Key, Tree1) -> Tree2 

우리는 실제로 완전히 새로운 트리를 만듭니다. 이 말은, 우리는 모두 후드 아래에있는 Tree1의 모든 노드를 여기에 복제합니까?

그렇다면이 언어가 고성능 서버 개발에 정말로 적합한가요?

감사합니다.

+5

단일 스레드 관점에서 Erlang은 (예를 들어) Java와 비교해 상대적으로 느리다는 것을 알았습니다. 자연스럽게 해석 되었기 때문에 생각했습니다. 그러나 다수의 CPU에 걸쳐 확장이 가능한 것 같습니다 내 (제한된 * 경험에서) 더 낫다. 따라서 복사 기능을 사용하면 단일 스레드 응용 프로그램을 약간 느리게 만들지 만 일반 프로그래머는 상당히 높은 처리량과 병목 현상이 적은 다중 스레드 응용 프로그램을 작성할 수 있습니다. –

답변

10

트리의 경우 실제로 변경되는 노드 만 복사하면됩니다. 서브 트리 CDE는 여전히 작동 이전과 동일하기 때문에

인수로 B와 delete_tree 메서드를 호출 할 경우
 A 
    /\ 
    / \ 
    B  C 
     /\ 
     D E 

, 복사 할 필요가있는 유일한 노드, A는 : 당신이 나무를 가지고 있다고 할 수 있습니다.

또한 작업 후 Tree1을 사용하지 않고 결과 트리 만 사용하는 경우 컴파일러에서 트리를 직접 수정하도록 작업을 변경할 수 있으므로 작업 속도가 빨라질 수 있습니다.

이러한 작업은 비용이 많이 들지 않으며 대부분의 데이터 구조에서 중복 복사 오버 헤드가 매우 적습니다. 바이트 배열로로드 된 큰 이미지의 경우에는 creative solutions이 필요할 수 있습니다.

얼랭은 속도가 아닌 서버 시스템에 적합하지만 안정성을 위해 적합합니다. 대용량 시스템에 10 대 또는 수백 대의 서버를 추가하는 것은 큰 문제가 아니지만, 예를 들어 전화 청구를위한 1 초의 중단 시간이있는 경우 큰 문제가됩니다. 미국에서는 수십만 건의 전화 요금이 부과되지 않을 수 있습니다. 이는 분명히 더 많은 서버를 구입하는 것보다 비용이 큽니다.

관련 문제