Node.js의 이벤트 중심 방식은 무엇이 다릅니까?ASP에서는 그렇게 할 수 없나요?넷의 HttpAsyncHandler?
저는 웹 프로그래밍에 대한 경험이 별로 없고, 아직 Node.js에서 코딩한 것이 없습니다. 단지 이벤트 중심 접근 방식이 궁금할 뿐입니다.좋은 것 같아요.
이 문서에서는 스레드 기반 접근 방식을 사용하여 요청을 처리할 때 발생할 수 있는 몇 가지 나쁜 일을 설명하고 있으며, 대신 이벤트 중심 접근 방식을 선택해야 합니다.스레드 기반에서 계산원/스레드는 음식/자원이 준비될 때까지 우리와 함께 있습니다.이벤트 중심으로 진행되는 동안, 계산원은 우리에게 요청 대기열 밖의 어딘가로 우리를 보내 우리가 음식을 기다리는 동안 다른 요청을 차단하지 않도록 합니다.차단 스레드 기반의 크기를 조정하려면 스레드 수를 늘려야 합니다.제가 보기에 이것은 스레드/스레드 풀을 제대로 사용하지 않는 것에 대한 나쁜 변명처럼 보입니다.
IHTtpAsyncHandler를 사용하여 적절하게 처리할 수 없습니까?ASP.Net은 요청을 수신하고 ThreadPool을 사용하여 처리기(BeginProcessRequest)를 실행한 다음 그 안에 콜백과 함께 파일/데이터베이스를 로드합니다.그런 다음 스레드가 다른 요청을 처리할 수 있습니다.파일 읽기가 완료되면 스레드 풀이 다시 실행되고 나머지 응답이 실행됩니다.저도 그렇게 다르지는 않습니다. 그런데 왜 그렇게 확장성이 없을까요?
제가 알고 있는 스레드 기반의 단점 중 하나는 스레드를 사용하는 데 더 많은 메모리가 필요하다는 것입니다.그러나 이것들만 있으면 여러 코어의 이점을 누릴 수 있습니다.Node.js가 스레드/코어를 전혀 사용하지 않는지 의심됩니다.
그렇다면 이벤트 기반 vs 스레드 기반("Javascript 및 모든 브라우저이기 때문에..." 인수를 가져오지 않음)만을 기반으로 기존 기술 대신 Node.js를 사용하면 실제 이점이 무엇인지 누가 알려줄 수 있습니까?
그건 긴 질문이었어요.감사합니다 :)
먼저 Node.js는 멀티 스레드가 아닙니다.이것은 중요합니다.스레드 환경에서 완벽하게 작동하는 프로그램을 설계하려면 매우 재능 있는 프로그래머여야 합니다.실은 그냥 딱딱합니다.
제대로 설계되지 않은 나사형 프로젝트를 유지하려면 신이 되어야 합니다.매우 큰 프로젝트에서는 피하기 어려운 문제가 너무 많습니다.
둘째, 전체 플랫폼이 비동기식으로 실행되도록 설계되었습니다.모든 IO 상호 작용이 비동기식이었던 ASP.NET 프로젝트를 본 적이 있습니까?간단히 말해 ASP.NET은 이벤트 중심으로 설계되지 않았습니다.
또한 개방형 연결당 하나의 스레드가 있고 전체 확장 문제가 있기 때문에 메모리 설치 공간이 필요합니다.내가 틀렸다면 수정해 주세요. 하지만 ASP.NET에서 각 연결에 대해 새 스레드를 생성하는 것을 어떻게 피할 수 있을지 모르겠습니다.
또 다른 문제는 Node.js 요청이 사용되지 않거나 IO 대기 중일 때 유휴 상태라는 것입니다.반면에, C# 스레드는 잠을 잡니다.자, 잠을 잘 수 있는 실의 수에는 한계가 있습니다.Node.js에서는 하나의 개발 컴퓨터에서 10,000개의 클라이언트를 동시에 쉽게 처리할 수 있습니다.당신은 하나의 개발 기계에서 10,000개의 스레드를 병렬로 처리하려고 합니다.
언어로서의 JavaScript 자체는 비동기식 코딩을 더 쉽게 만듭니다.만약 당신이 여전히 C# 2.0에 있다면, 비동기 구문은 정말 고통스럽습니다.만약 당신이 정의하고 있다면 많은 개발자들은 단순히 혼란스러울 것입니다.Action<>
그리고.Function<>
모든 곳에서 콜백을 사용합니다.이벤트 방식으로 작성된 ASP.NET 프로젝트는 일반 ASP.NET 개발자가 유지 관리할 수 없습니다.
스레드 및 코어의 경우.Node.js는 단일 스레드이며 다중 노드 프로세스를 생성하여 확장됩니다.코어가 16개인 경우 node.js 서버의 인스턴스 16개를 실행하고 그 앞에 단일 Node.js 로드 밸런서가 있습니다(원하는 경우 anginx 로드 밸런서일 수 있음).
이 모든 것은 처음부터 매우 낮은 수준에서 플랫폼에 기록되었습니다.이 기능은 나중에 사용할 수 있는 기능이 아닙니다.
기타 장점
Node.js는 위에 있는 것보다 훨씬 더 많은 것을 가지고 있습니다.위의 이유는 이벤트 루프를 처리하는 Node.js의 방법이 ASP.NET의 비동기 기능으로 처리하는 것보다 더 나은 이유일 뿐입니다.
- 성능.빠르네요.진짜 빨리.
- Node.js의 큰 장점 중 하나는 낮은 수준의 API입니다.당신은 많은 통제력을 가지고 있습니다.
- 전체 HTTP 서버를 코드에 직접 통합한 다음 IIS로 아웃소싱해야 합니다.
- nginx와 Apache의 전체 비교 결과를 확인할 수 있습니다.
- 전체 C10K 과제는 노드에서 잘 처리되지만 IIS에서는 잘 처리되지 않습니다.
- AJAX와 JSON의 커뮤니케이션은 자연스럽고 쉽습니다.
- 실시간 커뮤니케이션은 Node.js의 장점 중 하나입니다.그것은 그것을 위해 만들어졌습니다.
- 문서 기반 nosql 데이터베이스와 잘 호환됩니다.
- TCP 서버도 실행할 수 있습니다.파일 쓰기 액세스를 수행하고 서버에서 모든 유닉스 콘솔 명령을 실행할 수 있습니다.
- 예를 들어 CouchDB 및 map/reduce를 사용하여 Javascript로 데이터베이스를 쿼리합니다.당신은 자바스크립트로 당신의 고객을 씁니다.웹 스택에서 개발하는 동안 컨텍스트 스위치가 없습니다.
- 풍부한 커뮤니티 기반 오픈 소스 모듈 세트.node.js의 모든 것은 오픈 소스입니다.
- 설치 공간이 작고 의존성이 거의 없습니다.node.js 소스는 직접 빌드할 수 있습니다.
Node.js의 단점
어려워.어려요.숙련된 JavaScript 개발자로서, 저는 Node.js로 웹사이트를 작성하는 데 어려움을 겪고 있습니다. 단지 낮은 수준의 특성과 제가 가지고 있는 통제력 때문입니다.꼭 C 같은 느낌이에요.많은 유연성과 힘이 저를 위해 사용되거나 교수형에 처해질 수 있습니다.
API가 고정되지 않았습니다.빠르게 변화하고 있습니다.그때까지 Node.js의 양이 변경될 것이기 때문에 5년 안에 대형 웹사이트를 완전히 다시 작성해야 하는 것을 상상할 수 있습니다.이것은 할 수 있으며, 당신은 node.js 웹사이트의 유지보수가 저렴하지 않다는 것을 알아야 합니다.
진일보한 독서.
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
node.js 대 ASP.Net 및 비동기 프로그래밍과 관련하여 많은 오해가 있습니다.ASP.NET에서 비차단 IO를 수행할 수 있습니다.대부분의 사람들은 그것을 모릅니다.Netframework는 의 시작/끝 패턴을 사용하여 웹 서비스 호출 또는 기타 I/O 바인딩 작업을 수행할 때 아래에 Windows 완료 포트를 사용합니다.네트 2.0 이상.IO 완료 포트는 윈도우즈 운영 체제에서 비차단 IO를 지원하여 IO 작업이 완료되는 이유를 앱 스레드에서 해제하는 방식입니다.흥미롭게도, node.js는 Cygwin을 통해 Windows에서 덜 최적화된 비블로킹 IO 구현을 사용합니다.마이크로소프트의 지침에 따라 IO 완료 포트를 사용하는 새로운 Windows 버전이 로드맵에 나와 있습니다.그 시점에서는 아무런 차이가 없습니다.
ADO.NET에서 비차단 데이터베이스 호출을 수행할 수도 있지만 NHibernate 및 Entity Framework와 같은 ORM 도구에 유의해야 합니다.그들은 여전히 매우 동기화되어 있습니다.
동기 IO(차단)는 제어 흐름을 훨씬 더 명확하게 만들어 이러한 이유로 널리 사용되고 있습니다.컴퓨터 환경이 멀티 스레드화되는 이유는 표면적으로 이것과 관련이 있을 뿐입니다.이는 일반적으로 여러 CPU의 시간 공유 및 사용률과 관련이 있습니다.
스레드가 하나만 있으면 장시간 작업 중에 기아가 발생할 수 있으며, 이는 IO 및 복잡한 계산과 관련이 있을 수 있습니다.따라서, 논블로킹 IO를 활용할 때 경험칙이 하나의 스레드 pr. 코어라고 하더라도, 이러한 작업이 있을 경우 단순한 요청이 더 복잡한 작업으로 인해 손실되지 않도록 충분한 스레드 풀 크기를 고려해야 합니다.또한 여러 스레드를 사용하면 복잡한 작업을 여러 CPU 간에 쉽게 분할할 수 있습니다.node.js와 같은 단일 스레드 환경에서는 더 많은 프로세스와 메시지 전달을 통해서만 멀티코어 프로세서를 활용하여 작업을 조정할 수 있습니다.
저는 개인적으로 node.js와 같은 추가 기술을 도입해야 한다는 설득력 있는 주장을 아직 보지 못했습니다.하지만, 좋은 이유가 있을 수 있지만, 이것은 ASP.NET에서도 가능하기 때문에, 제 생각에 그것들은 논블로킹 IO를 통해 많은 수의 연결을 서비스하는 것과 거의 관련이 없습니다.
BTW tamejs는 새로운 출시와 유사하게 노드js 코드를 더 읽기 쉽게 만드는 데 도움이 될 수 있습니다.NetAsync CTP.
Node.js와 ASP.NET 커뮤니티 간의 문화적 차이를 과소평가하기 쉽습니다.물론 IHTtpAsyncHandler가 존재하며 .NET 1.0 이후부터 존재했기 때문에 좋을 수도 있지만 Node.js에 대한 모든 코드와 논의는 비동기 I/O에 대한 것으로, .NET의 경우에는 분명히 그렇지 않습니다.LINQ To SQL을 사용하시겠습니까?당신은 일종의, 일종의, 일종의.기록하고 싶으세요?아마도 "CSSharp DotNet Logger"가 작동할 것입니다.
예, IHTTpAsyncHandler가 있으므로 주의를 기울이면 차단 I/O에 걸려 넘어지지 않고 이벤트 기반 웹 서비스를 작성할 수 있습니다. 하지만 많은 사람들이 이 서비스를 사용하고 있다는 인상을 받지는 못했습니다(그리고 ASP.NET 앱을 작성하는 데 있어 중요한 방법은 아닙니다).이와 대조적으로 Node.js는 이벤트 I/O, 모든 코드 예제, 모든 라이브러리에 대한 것이며 사람들이 이를 사용하는 유일한 방법입니다.이벤트가 발생한 I/O 모델이 실제로 계속 작동하는 것에 베팅한다면 Node.js를 선택해야 할 것입니다.
현재 시대의 기술 개선 사항과 아래 링크를 읽는 것과 같이, 중요한 특정 시나리오에 따라 완벽한 조합을 선택하는 것은 전문성의 문제라고 말할 수 있습니다.NodeJS는 성숙해지고 있으며 ASP.NET 측에서는 ASP.NET MVC, WebAPI, SignalR 등을 사용하여 상황을 개선하고 있습니다.
http://www.salmanq.com/blog/net-and-node-js-performance-comparison/2013/03/ 및
http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx
감사해요.
언급URL : https://stackoverflow.com/questions/5599024/what-so-different-about-node-jss-event-driven-cant-we-do-that-in-asp-nets-ht
'programing' 카테고리의 다른 글
피벗에서 (null) 값을 출력 0으로 바꾸는 방법 (0) | 2023.06.28 |
---|---|
Firebase에서 특정 사용자 삭제 (0) | 2023.06.28 |
Spring - server.connection-timeout이 작동하지 않습니다. (0) | 2023.06.28 |
CONCATing NULL 필드 (0) | 2023.06.28 |
SQL Server에서 증분 ID의 시작 값을 재설정하는 방법 (0) | 2023.06.28 |