2010-07-26 3 views
10

Erlang에서 나는 자체 노드 인 Erlang VM의 개념을 즉시 이해할 수있었습니다. 한 컴퓨터에서 노드를 erl -name gandalf -setcookie abc으로 시작하고 다른 노드의 노드를 동일한 LAN에있는 erl -name bilbo -setcookie abc으로 시작할 수 있습니다. 나는 그 다음 bilbo에서 다른 프로세스와 마술로 의사 소통 할 간달린에 대한 프로세스를 생성 할 수있었습니다. 자, 얼랭 (Erlang) 프로세스의 애니메이션 그래픽 결과로 재즈 웹 페이지를 제공하기 위해 Javascript를 익히고 jQuery를 배웠습니다. 아직도 겸손한 paduwan,하지만 일종의 계획에 Javascript가 맞는 방법을 이해합니다.node.js의 노드 란 정확히 무엇입니까?

나는 최근에 node.js를 보았고 (악의) 목소리가 속삭였다. 'This is it! 이제 Javascript로 모든 것을 할 수 있습니다! 얼랭 (Erlang)과 경호원과 마침표를 잊어 버리고 모두가 사용하는 언어에 충실하십시오.

문서를 조금 읽었지만 node.js에 노드가 무엇인지 아직 이해할 수 없습니다. http 서버를 실행해야합니까? 그러면 내 노드가됩니까? 내가 http를 좋아하지 않는다면, 아니면 간달프가 빌보와 어떻게 대화하는지 신경 쓰지 않아도됩니다. 그것이 내가 얼랭에서 좋아하는 것입니다. 어쩌면 그럴 수 없다 : node.js가 Javascript 설탕과 함께 erlang이 될 것으로 기대 하는가?

+9

"최근에 node.js를 만나고 (악의) 목소리가 속삭이기 시작했습니다."- 아마 더글라스 크록 포드 (Douglas Crockford) 였을 것입니다. –

+0

아마도 악한 목소리가 ++ 나 -를 사용하지 않는다고 말한 것일뿐입니다. –

+0

또는 항상 4 개의 공백을 사용하여 항상 들여 쓰려면 2를 사용하지 말고 3을 사용하십시오. – Rixius

답변

4

내가 아는 바대로 Node.JS 노드는 Node.JS 런타임 및 이벤트 루프가 실행되는 V8 엔진의 인스턴스입니다. Node.JS 런타임은 매우 빠르고 간단하게 HTTP 요청 처리를 시작할 수 있지만 필수는 아닙니다. 실제로 모든 종류의 비동기 I/O를 처리하는 것이 매우 좋습니다.

나는 Erlang에 대해 많이 알지 못하지만, 필자의 표면적 인 이해는 높은 강점은 높은 동시성 컴퓨팅이라는 것입니다. Node.JS는 그 자체로는 전문적이지 않습니다. 그 핵심은 비동기 I/O로 깔끔하고 깨끗하게 처리되는 "이벤트 I/O"입니다.

7

Node.js는 Erlang/OTP보다 Twisted과 훨씬 더 많이 있습니다. Node.js는 단일 스레드 이벤트 루프 인 SEDA입니다. Node.js는 배포, 핫 코드 재로드 및 프로세스를 통한 확장 성 측면에서 Erlang VM과 비교해 아무 것도 없습니다. "자바 얼라이언스와 함께 얼랭 (Arlang)"에 가까운 것은 아닙니다

1

노드에 "노드"가 없습니다. 언급 한 바와 같이

, 당신은 당신이 (수명에 대한 하나 개의 코어를 사용하는) V8 자바 스크립트 인터프리터 의 한 인스턴스를 실행하는

node my_script.js 

을 실행 JS.

7

Erlang 지식으로 인해 Node.js가 "노드"(erlang 노드)와 관련이 있다고 생각 했겠지만 그 이름 일뿐입니다.

Node.js의 주요 아이디어는 값 비싼 I/O 연산을 모두 연기하고 해당 연산의 결과에 콜백을 할당한다는 것입니다. 그 이유는 I/O가 현재 실행중인 (유일한) 프로세스를 차단하기 때문입니다. 적절한 방식으로 코딩하고 있다면 Node.js가이를 처리합니다. 당신은 매우 다른 방식으로이 문제를 코딩 할 노드에서

result = SQL.query("EXPENSIVE SELECT HERE") 
doSomething(result); 
moreStuff(); // This line must wait until the previous ones are completed. 

:

SQL.query("EXPENSIVE SELECT HERE", function(result) { 
    doSomething(result); 
}); 
moreStuff(); // This line executes inmediately 

당신이 당신의 노드에서 잘못된 코드가있는 경우

이의 쉬운 예는 데이터베이스 호출입니다.JS 스크립트, 같은 :

while(true) { } 

그런 다음이 과정을 차단하고 Node.js를 위의 지침을 따르 필수입니다에 그래서, 현재의 것보다 더 많은 요청을 처리 할 수 ​​없습니다.

관련 문제