Node.js는 실제로 확장 성을 향상합니까?


21

C10K 문제에 대해 읽었으며 특히 비동기 서버 I / O를 나타내는 부분이 있습니다. http://www.kegel.com/c10k.html#aio

나는 이것이 스레드가 사용자 요청을 처리하는 동안 스레드가 사용자 요청을 처리하는 동안 스레드가 서버에서 수행하는 작업을 스레드에게 알리는 대신 스레드가 사용자 요청을 처리 할 수 ​​있도록함으로써 Node.js가하는 일을 거의 요약한다고 생각합니다. 전체 CPU 작업. 스레드는 다른 작업을 수행 할 수 있으며 (차단되지 않음) 작업이 완료되면 (예 : 파일을 찾거나 비디오를 압축 할 때) 알림을받습니다.

이것은 스레드가 소켓과 서버의 사용자에게 더 '사용 가능'하다는 의미입니다.

그런 다음 이것을 발견했습니다 : http://teddziuba.com/2011/10/straight-talk-on-event-loops.html

필자는 여기서 이벤트 중심 프레임 워크 (스레딩 중단)가 스레드를 해제 할 수 있지만 실제로 CPU가 수행해야하는 작업량을 줄이지는 않는다고 주장합니다! 예를 들어, 사용자가 업로드 한 비디오를 압축하도록 요청한 경우 CPU가 실제로이 작업을 수행해야하지만 실제로는 작업을 차단해야합니다. 더 잘 알고 있습니다!).

나는 서버 관리자 나 그와 비슷한 것이 아닌 간단한 코더입니다. 알고 싶은 것은 Node.js가 '클라우드 컴퓨팅'의 신들로부터 온 선물입니까, 아니면 뜨거운 공기입니까? 확장 성을 향상 시켜서 회사의 시간과 돈을 실제로 절약하지 않습니까?

많은 감사합니다.


12
첫째로 ted는 트롤이며, 둘째로 node.js는 CPU 바인딩 응용 프로그램이 아닌 IO 바인딩 응용 프로그램을위한 것입니다. 당신이 원하는 것은이 둘의 조합입니다. CPU 바운드는 새로운 스레드 / 프로세스로 이동합니다. IO 바운드는 이벤트 루프에 들어갑니다.
Raynos

1
+! 그 남자는 확실히 트롤입니다.
Patrick Hughes

아파치를 사용한다면 (어떤 이유로 든) 노드는 신의 선물이지만 Nginx와 비교하면 개선은 훨씬 덜 급격하며 노드는 더 느립니다. (응답을 생성하기 위해 10ms 느리게, 2ms 대 20ms), 그러나 테스트에서 Nginx는 약간 무거운 부하 하에서 504를 제공했으며 노드는 정상적인 응답을 제공했습니다.
c69

트롤 녀석은 분명히 트롤입니다. @ c69 좋은 정보입니다. 감사합니다.
Alex

"이벤트 루프에서 바로 대화"링크가 더 이상 작동하지 않습니다.
Robert Harvey

답변:


20

물론 모든 CPU 바운드 작업은 CPU를 활용합니다. 언어 나 프레임 워크에 관계없이 CPU를 차단할 것입니다.

Node.js는 CPU 바인딩이 아닌 I / O 바인딩 작업이있을 때 유용합니다. 나는 할 수는 있지만 노드에서 무거운 물건을 들지 않을 것입니다. Node.js는 피보나치 수 서버 와 같은 허구나 상상의 문제가 아닌 실제 문제를 해결 합니다 . “뜨거운 공기”가 아닙니다.


그냥 몇 가지 벤치 마크를 확인하고 실제로 그것을 제공하는 페이지에서 빠른 방법을 보인다 : zgadzaj.com/...을 .. 나는 이것이 내가 후에 ... 무엇인지 추측
알렉스

3
@AlexW : 이러한 벤치 마크에 대한 좋은 점은 기본적으로 정적 콘텐츠를 제공한다는 것입니다. 나의 백만의 일 조회수 조각을보십시오. PHP 인터프리터를 돌리는 것은 낭비입니다. 파일 디렉토리를 제공하기 위해 node-static 과 같은 것을보십시오 .
Josh K

@AlexW, 그냥 그 생각 나게 zgadzaj.com/...의 지금 오래된 인 0.1.103 Node.js를 사용을!
Samyak Bhuta

4

C10K 논문은 구현 세부 사항과 관련하여 다소 오래되었지만 이벤트 기반 동시성 (반응기 모델)은 여전히 ​​선점 일정보다 우수합니다. 예를 들어, 선점 예약 모델은 스레드가 IO 차단되는 동안 스레드를 예약 할 수 있습니다. 이를 통해 노드 (및 Ruby의 Event Machine 및 Python 's Twisted와 같은 기타 도구)는 실제 작업을 수행하는 데 더 많은 시간을 소비하고 시간을 덜 차단함으로써 사용 가능한주기를 더 잘 사용할 수 있습니다.


-1

멀티 스레딩은 여전히 ​​성능을 향상시킵니다. 원래의 설명은 다중 코어의 존재를 고려하지 않기 때문에 바보입니다. 코어가 둘 이상인 순간 스레드는 더 이상 스레드가 아닙니다. 하이퍼 스레드입니다. 모든 스레드 중심 응용 프로그램은 단일 스레드 응용 프로그램보다 더 많은 이점을 얻을 수 있습니다.


2
이것은 실제로 Node.JS 열정을 설명하지 않습니다. Node.JS의 주요 이점은 단일 스레드에서 여러 요청을 신속하게 처리하고 디스패치 할 수 있다는 것입니다.
Robert Harvey

node.js의 주요 이점은 프론트 엔드 및 백엔드에 단일 언어를 사용하는 것입니다. 다른 모든 주장은 더 중요하게 보이기 위해 보풀입니다.
whatsisname

2
@whatsisname 단일 스레드 동시성은 내 의견으로는 단일 언어를 사용하는 것보다 훨씬 큰 이점입니다.
pllee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.