중화사전망 - 서예자전 - Node.js 와 Python 이 백엔드 서비스 프로그래밍 언어로서의 장단점은 무엇입니까?
Node.js 와 Python 이 백엔드 서비스 프로그래밍 언어로서의 장단점은 무엇입니까?
NodeJS 공식 홈페이지에 소개된 것을 보시죠.
노드. js? 플랫폼은 Chrome 에 구축되어 있습니까? 자바스크립트? 빠르고 확장 가능한 네트워크 어플리케이션의 런타임을 쉽게 구축할 수 있습니다. -응? 노드. js? 이벤트 중심의 비차단 I/O 모델을 사용하여 가볍고 효율적으로 분산 장치에서 실행되는 데이터 집약형 실시간 어플리케이션에 적합합니다.
그 특징은 다음과 같습니다.
1. 자바스크립트 런타임 환경입니다.
코드 해석은 크롬 V8 엔진에 따라 다릅니다.
3. 이벤트 중심
4. 비차단 입출력
5. 실시간 데이터 상호 작용 어플리케이션을 위한 경량하고 확장 가능합니다.
6. 단일 프로세스, 단일 스레드
2.NodeJS 로 인한 시스템 병목 현상 솔루션
그것의 출현은 실제로 우리가 실제 시스템 병목 현상을 해결할 수 있는 새로운 사고와 해결책을 제공할 수 있다. 그것이 어떤 문제를 해결할 수 있는지 봅시다.
1. 동시 연결
예를 들어, 우리가 은행에서 줄을 서서 업무를 처리하는 장면을 상상해 보십시오. 다음 두 가지 모델을 살펴 보겠습니다.
(1) 시스템 스레드 모델:
이 모델의 문제는 분명합니다. 서버에는 스레드가 하나만 있으며 도착하면 하나의 동시 요청 (사용자) 만 처리할 수 있습니다. 나머지는 먼저 기다려야 한다. 이것이 바로 막히는 것이다. 서비스를 즐기고 있는 요청이 다음 요청을 차단했습니다.
(2) 멀티스레드 및 스레드 풀 모델:
이 모델은 이전 모델보다 개선되었다. 서버 스레드 수를 조정하여 동시 요청의 수신 및 응답을 향상시킵니다. 그러나 동시성이 높을 때 요청은 여전히 기다려야 하는데, 이것은 더 심각한 문제가 있다. 코드 수준에서 클라이언트가 서버와의 통신을 요청하는 과정을 살펴보겠습니다.
서버와 클라이언트 간에 연결이 설정될 때마다 해당 연결에 지원 리소스 세트를 할당해야 합니다. 이는 주로 시스템 메모리 리소스에 반영됩니다. PHP 의 경우 연결을 유지 관리하려면 20M 메모리가 필요할 수 있습니다. 이것이 바로 동시성이 높을 때 더 많은 서버가 필요한 이유이다.
그러면 NodeJS 는 어떻게 이 문제를 해결했을까요? 또 다른 모델을 살펴 보겠습니다. 패스트 푸드 레스토랑에서 주문한다고 상상해보십시오.
③ 비동기 및 이벤트 중심 모델
또한 요청을 시작하고 서버 응답을 기다리고 싶습니다. 하지만 은행 사례와는 달리, 이번에는 주문 후 번호를 받았는데, 번호를 받을 때 우리는 종종 위치에서 기다리며, 우리 뒤의 요청은 계속 처리될 것이다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 은행명언) 마찬가지로, 우리는 번호를 가지고 옆에서 기다리면 호스트는 항상 잘 처리할 수 있다.
음식이 번호가 매겨지면 번호가 호출되고 후속 처리 (식용) 를 위해 자체 음식을 얻습니다. 숫자를 호출하는 이 동작은 NodeJS 에서 Callback 이라고 하며 이벤트 (cooking, I/O) 처리가 완료된 후에도 다음 논리 (eating) 를 계속 실행하여 NodeJS 의 두드러진 특징을 보여 줍니다. 비동기 메커니즘 및 이벤트 중심 프로세스는 새 사용자 (주문) 의 연결을 차단하지 않으며 주문한 사용자와 요리사 간의 연결을 유지할 필요가 없습니다.
이 메커니즘을 기반으로 이론적으로 사용자가 하나씩 연결을 요청하면 NodeJS 가 응답할 수 있습니다. 따라서 NodeJS 는 이벤트 대기열을 유지 관리하는 데 비용이 들더라도 Java 및 PHP 프로그램보다 더 높은 동시성을 지원할 수 있습니다. 또한 NodeJS 는 단일 스레드이므로 이벤트 대기열이 길수록 응답 시간이 길어지고 동시성은 여전히 부족합니다.
NodeJS 가 동시 연결 문제를 해결하는 방법을 요약합니다. 서버에 연결하는 방식을 변경하면 각 연결은 NodeJS 엔진의 프로세스에서 실행되는 이벤트를 발생시켜 각 연결에 대해 새 OS 스레드를 생성하고 지원되는 메모리를 할당하는 대신 이벤트 대기열에 넣습니다.
2. 입/출력 차단
NodeJS 가 해결하는 또 다른 문제는 I/O 차단입니다. 이 비즈니스 시나리오를 살펴보십시오. 여러 데이터 소스에서 데이터를 추출하여 처리해야 합니다.
(1) 직렬 데이터 수집은 PHP 를 예로 들어 우리의 일반적인 솔루션입니다.
프로필과 타임라인을 가져오는 데 1 초가 필요하면 시퀀스를 가져오는 데 2 초가 걸립니다.
(2)NodeJS 비차단 I/O, 이벤트를 전송/수신하여 실행 프로세스를 제어합니다.
NodeJS 는 입출력 이벤트가 발생할 때 실행할 스레드를 만들고 주 스레드는 계속 실행합니다. 따라서 구성 파일을 가져오는 작업으로 입출력 이벤트가 트리거되면 시간 표시 막대를 가져오는 작업이 즉시 수행되고 두 작업이 병렬로 실행됩니다. 각 작업에 1 초가 필요한 경우 총 시간은 1 초입니다. I/O 작업이 완료되면 이벤트, 구성 파일 및 타임라인이 전송되고 이벤트 에이전트는 수신 후 다음 논리를 계속 실행합니다. 이는 NodeJS 비차단 I/O 의 특징입니다.
요약하면 Java 와 PHP 도 병렬 요청 (하위 스레드) 을 구현할 수 있지만 NodeJS 는 콜백 함수와 비동기 메커니즘을 통해 자연스럽게 구현됩니다.
셋. NodeJS 의 장단점
장점: 1. 높은 동시성 (가장 중요한 이점)
2. I/O 처리량이 많은 어플리케이션에 적합합니다.
단점: 1. CPU 집약형 어플리케이션에 적합하지 않음 : CPU 집약형 어플리케이션은 주로 JavaScript 단일 스레드로 인해 대용량 루프와 같이 장시간 실행되는 계산이 있을 경우 CPU 타임 슬라이스가 해제되지 않고 후속 I/O 가 시작되지 않는 문제를 야기합니다.
해결 방법: 하나의 큰 운영 작업을 여러 개의 작은 작업으로 분할하여 I/O 호출의 시작을 차단하지 않고 즉시 해제할 수 있습니다.
2. 싱글 코어 CPU 만 지원되며 CPU 를 충분히 활용할 수 없습니다.
3. 신뢰성이 낮아 코드의 한 부분이 무너지면 전체 시스템이 붕괴됩니다.
원인: 단일 프로세스, 단일 스레드
솔루션: (1)nni GX 역방향 에이전트, 로드 밸런싱, 다중 프로세스 개방, 다중 포트 바인딩
(2) 여러 프로세스를 시작하여 동일한 포트를 수신하고 클러스터 모듈을 사용합니다.
4. 오픈 소스 구성 요소 라이브러리의 품질이 고르지 않고 업데이트가 빠르고 역호환되지 않습니다.
디버깅이 불편하고 오류에 스택 추적이 없습니다.
넷. NodeJS 에 적합한 장면
1.RESTful API
이것은 NodeJS 가 수천 개의 연결을 처리할 수 있는 최적의 응용 프로그램 시나리오입니다. 그 자체로는 논리가 별로 없습니다. API 를 요청하고 데이터 반환을 구성하기만 하면 됩니다. 기본적으로 데이터베이스에서 일부 값을 찾아 하나의 응답으로 결합합니다. 응답은 소량의 텍스트이고 인바운드 요청도 소량의 텍스트이기 때문에 트래픽이 높지 않아 한 대의 기계도 가장 바쁜 회사의 API 요구를 처리할 수 있습니다.
2. 통합 웹 응용 프로그램의 UI 계층.
현재 MVC 아키텍처는 어떤 의미에서 웹 개발에는 두 개의 UI 계층이 있는데, 하나는 우리가 브라우저에서 최종적으로 볼 수 있는 내용이고, 다른 하나는 서버측에서 페이지를 생성하고 패치하는 역할을 한다.
이 아키텍처가 좋은지 나쁜지는 논의하지 않지만, 프런트 엔드와 백 엔드 간의 의존성을 더 잘 분리하는 또 다른 관행인 서비스 지향 아키텍처가 있습니다. 모든 주요 비즈니스 로직이 REST 호출로 캡슐화되면 상위 계층은 이러한 REST 인터페이스를 사용하여 특정 애플리케이션을 구축하는 방법만 고려하면 됩니다. 백엔드 프로그래머들은 특정 데이터가 한 페이지에서 다른 페이지로 어떻게 전달되는지, 사용자 데이터 업데이트가 Ajax 를 통해 이루어지는지, 페이지 새로 고침을 통해 비동기적으로 제공되는지도 신경쓰지 않는다. (알버트 아인슈타인, Northern Exposure (미국 TV 드라마), 예술명언)
많은 수의 Ajax 요청 응용 프로그램
예를 들어, 각 사용자가 서로 다른 페이지를 보고 캐시가 유효하지 않은 개인 설정 응용 프로그램을 사용할 수 있습니다. Ajax 요청은 페이지가 로드될 때 시작되어야 하며 NodeJS 는 많은 동시 요청에 응답할 수 있습니다. 결론적으로 NodeJS 는 높은 동시성, 입출력 집적도, 비즈니스 논리가 적은 시나리오에 적합합니다.
파이썬의 장점과 단점
우세
단순성-Python 은 단순성 사상을 대표하는 언어이다. 좋은 파이썬 프로그램을 읽는 것은 영어를 읽는 것과 같다. 비록 영어에 대한 요구가 매우 엄격하긴 하지만! 파이썬 (Python) 의 이런 유사 코드 특성은 가장 큰 장점 중 하나이다. 그것은 언어 자체를 이해하는 것이 아니라 문제 해결에 집중할 수 있게 해준다.
배우기 쉽습니다. 보시다시피 파이썬은 사용하기 쉽습니다. 앞서 언급했듯이 파이썬은 매우 간단한 구문을 가지고 있습니다.
무료 및 오픈 소스-파이썬은 FLOSS (무료/오픈 소스 소프트웨어) 중 하나입니다. 간단히 말해서, 소프트웨어 사본을 자유롭게 배포하고, 소스 코드를 읽고, 변경하고, 새로운 무료 소프트웨어에서 그 중 일부를 사용할 수 있습니다. 플로스는 한 그룹이 지식을 공유하는 개념을 기반으로 합니다. 이것이 Python 이 이렇게 우수한 이유 중 하나입니다. 더 나은 Python 을 보고 지속적으로 개선하고자 하는 사람들이 만든 것입니다.
고급 언어-Python 언어로 프로그램을 작성할 때 프로그램에서 사용하는 메모리를 관리하는 방법과 같은 기본 세부 사항을 고려할 필요가 없습니다.
이식성-Python 은 오픈 소스의 특성으로 인해 여러 플랫폼으로 마이그레이션되었습니다 (다른 플랫폼에서 작동하도록 수정됨). 시스템 종속 기능을 사용하지 않도록 조심하면 모든 파이썬 프로그램을 수정하지 않고도 다음 플랫폼에서 실행할 수 있습니다. 이러한 플랫폼으로는 Linux, Windows, FreeBSD, Macintosh, Solaris, OS/2, Amiga, AROS, AS/400, BeOS, OS/가 있습니다. Sharp Zaurus, Windows CE, 포켓 PC, 심비안, 구글의 리눅스 기반 안드로이드 플랫폼!
설명-이 점에 대한 설명이 필요합니다. C 또는 C++ 와 같은 컴파일된 언어로 작성된 프로그램은 소스 파일 (즉, C 또는 C++ 언어) 에서 컴퓨터에서 사용하는 언어 (이진 코드, 0 및 1) 로 변환할 수 있습니다. 이 프로세스는 컴파일러와 다른 레이블 및 옵션으로 수행됩니다. 프로그램을 실행할 때 링커 소프트웨어는 하드 드라이브에서 메모리로 프로그램을 복사하여 실행합니다. 파이썬 언어로 작성된 프로그램은 이진 코드로 컴파일할 필요가 없습니다. 소스 코드에서 직접 프로그램을 실행할 수 있습니다. 컴퓨터 내부에서 파이썬 인터프리터는 소스 코드를 바이트 코드라는 중간 형식으로 변환한 다음 컴퓨터에서 사용하는 기계 언어로 번역하여 실행합니다. 사실, 프로그램을 컴파일하는 방법, 연결이 올바른 라이브러리를 전달하는 방법 등에 대해 걱정할 필요가 없기 때문입니다. 이 모든 것이 파이썬 사용을 더 쉽게 만듭니다. Python 프로그램을 다른 컴퓨터로 복사하기만 하면 작동하기 때문에 Python 프로그램을 쉽게 마이그레이션할 수 있습니다.
객체 지향-파이썬은 프로세스 지향 프로그래밍과 객체 지향 프로그래밍을 모두 지원합니다. "프로시저 지향" 언어에서 프로그램은 프로시저 또는 재사용 가능한 코드의 함수로 구성됩니다. 객체 지향 언어에서 프로그램은 데이터와 함수로 구성된 객체로 구성됩니다. Python 은 C++ 및 Java 와 같은 다른 주요 언어에 비해 매우 강력하고 간단한 방식으로 객체 지향 프로그래밍을 구현했습니다.
확장성-더 빠른 실행을 위해 키 코드가 필요하거나 특정 알고리즘을 비밀로 유지하려는 경우 C 또는 C++ 를 사용하여 프로그램을 작성한 다음 파이썬 프로그램에서 사용할 수 있습니다.
포함 가능성-C/C++ 프로그램에 Python 을 포함시켜 프로그램 사용자에게 스크립팅 기능을 제공할 수 있습니다.
풍부한 라이브러리-파이썬 표준 라이브러리는 정말 큽니다. 정규 표현식, 문서 생성, 단위 테스트, 스레드, 데이터베이스, 웹 브라우저, CGI, FTP, 이메일, XML, XML-RPC, HTML, WAV 파일, 암호 시스템 등 다양한 작업을 처리하는 데 도움이 됩니다 파이썬이 설치된 한 이러한 모든 기능을 사용할 수 있다는 점을 기억하십시오. 이를 파이썬의 "모든 기능" 개념이라고 합니다. 표준 라이브러리 외에도 wxPython, Twisted, Python 이미지 라이브러리와 같은 많은 고품질 라이브러리가 있습니다.
요약-파이썬은 정말 기묘하고 강력한 언어이다. 그것은 합리적으로 고성능과 프로그래밍을 간단하고 흥미롭게 하는 특징을 결합했다.
표준 코드-파이썬은 강제 들여쓰기를 사용하여 코드를 매우 읽기 쉽게 만듭니다.
열세
강제 들여쓰기
제한이라고 할 수는 없지만 들여쓰기를 사용하여 문장 관계를 구분하는 방식은 여전히 많은 초보자들에게 혼란을 주고 있다. 경험 많은 파이썬 프로그래머조차도 함정에 빠질 수 있다. 가장 흔한 경우는 탭과 공백을 혼용하면 오류가 발생하여 육안으로는 구분할 수 없다는 것이다.
단일 행 문 및 명령줄 출력 문제
Sys 를 가져와 시스템 경로의 I: 인쇄 I 에 대해 한 줄로 프로그램을 쓸 수 없는 경우가 많습니다. Shell 과 awk 는 Python 처럼 프로그램을 작성하지 않고도 쉘 아래에서 간단한 프로그램을 쉽게 완성할 수 있는 제한이 없습니다. Py 파일. (많은 사용자에게 이것은 제한이 아닙니다. ) 을 참조하십시오
65438 번 +0 실행 속도, 속도 요구 사항이 있는 경우 C++ 로 주요 부분을 다시 작성합니다.
NO.2 국내 시장이 작다 (국내 주요 개발 파이썬, 현재 몇 개밖에 없나요? 웹 2.0 회사). 그러나 시간이 지남에 따라 많은 국내 소프트웨어 회사, 특히 게임 회사들이 이미 대규모로 사용하기 시작했다.
No.3 중국어 자료가 희귀하다 (좋은 파이썬 중국어 자료는 손꼽힌다). 지역 사회에 감사드리며 훌륭한 교과서 몇 권을 번역했지만, 많은 초급 교과서가 있어서 고급 내용은 영어로만 읽을 수 있습니다.
4 번 건물에는 너무 많은 선택이 있습니다 (공식 없음). Net 아키텍처, 루비는 역사가 짧기 때문에 상대적으로 집중된 아키텍처 개발이 없습니다. Ruby on Rails 프레임워크는 중소형 웹 프로그램 개발에 있어서 무적이다. 그러나 이는 또 다른 측면에서 python 의 우수성을 보여 주고 더 많은 인재와 프로젝트를 끌어들인다.
- 관련 기사
- 귀신은 네 종류의 귀신입니까? 그것들은 각각 무엇입니까?
- 현대 도서관 소장품은 어떤 책을 선택해야 합니까?
- 광서년 사전총 14 부. 그것들의 대략적인 가치는 얼마입니까?
- Di 로 명명한 여학생의 가장 듣기 좋은 이름은 무엇입니까?
- 나무 사자성어
- M8 과 M6 중 어느 것이 좋을까요? 기념할 만한 스타들은 모두 쓰레기라고 합니다. 나는 그렇지 않은지 모르겠다. 며칠 후에 누군가가 나를 데려올 것이다. 내가 원하는지 아닌지 봐라.
- 야자의 옆은 무엇입니까?
- 단어 옆에 무엇을 읽어야 합니까?
- 독서와 생활에 관한 작문 800 자 (급해요! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ) 을 참조하십시오
- 치료의 번체자는 어떻게 쓰나요?