Node.js_node.js의 비동기 IO 성능에 대한 토론

WBOY
풀어 주다: 2016-05-16 16:34:41
원래의
1215명이 탐색했습니다.

대부분의 웹 애플리케이션의 병목 현상은 IO, 즉 디스크 읽기 및 쓰기, 네트워크 읽기 및 쓰기, 데이터베이스 읽기 및 쓰기입니다. 이 기간을 기다리기 위해 어떤 전략을 사용할 것인지가 성능 향상의 핵심이 됩니다.

PHP의 전략: 여러 프로세스를 실행하고 IO가 완료될 때까지 직접 기다립니다. 단점: 여러 프로세스가 여러 메모리 복사본을 사용하므로 프로세스 간에 데이터를 공유하기가 어렵습니다.

일반적인 C/C 전략: 여러 스레드에서 실행되고 프로그램은 자체적으로 잠금 상태를 유지합니다. 단점: 개발 비용이 높고 오류가 발생하기 쉬우며 디버깅이 어렵습니다.
Python(Tornado): 단일 프로세스에서 여러 요청이 차례로 실행되고, IO가 발생하면 다른 요청으로 전환됩니다. 단점: 단일 요청에 대해 여전히 가장 효율적인 시간 사용은 아닙니다.
"가장 효율적인 시간 사용"이란 무엇입니까? 예를 들어, 관련되지 않은 두 개의 데이터베이스 쿼리가 있습니다. PHP에서는 일반적으로 하나가 먼저 실행되고 두 번째 쿼리는 실행이 완료된 후 실행됩니다(총 시간은 b입니다). 분명히 이것은 가장 효율적이지 않으며 두 쿼리 모두입니다. 동시에 실행되어야 합니다. is max(a, b).

파이썬이나 멀티스레딩을 지원하는 다른 언어의 문제점은 언어 수준에서 프로그래머가 두 가지 작업을 동시에 수행해야 한다고 가상 머신에 지시하기 어렵다는 것입니다. 방법은 꽤 번거롭고 대부분의 사람들은 너무 게으르기 때문에 사용할 가치가 없습니다. 그리고 Node.js는 모든 IO를 비동기식으로 실행하도록 강제하기 때문에 Node.js 프로그래머도 이에 익숙하다고 할 수 있습니다. 코드 가독성을 향상시키는 일부 라이브러리(promise, async)를 사용하면 관련 없는 작업을 쉽게 병렬로 실행할 수 있습니다. .

위에서 비동기 IO 구현에 대해 논의했는데, 비동기 IO의 장점은 무엇인가요? 실제로 비동기 IO는 서버에 대한 부담을 마술처럼 줄일 수는 없습니다. 그러나 비동기 IO는 단일 요청 시간을 줄이고 의미 없는 대기 시간을 제거합니다. 단일 요청. 따라서 단위 시간당 처리되는 요청 수는 변하지 않지만, 각 요청의 처리 시간은 단축됩니다. 이러한 관점에서 서버는 일부 리소스, 즉 각 요청에 대한 연결을 유지하는 데 사용되는 메모리도 절약합니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿