비동기 프로그래밍의 Node.js를

> 공공의 수에 원래 기사 : 원숭이 저우 Xiansen 프로그램입니다. 이 플랫폼은 나의 기사처럼, 나는 마이크로 채널 대중 번호로 주목을 환영합니다, 정기적으로 업데이트되지 않습니다. ! [파일] (https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133629699-504481514.jpg) 사실, 대부분의 개발자, 선형 생각 비동기 프로그래밍은 자연 언어가있을 것입니다 충돌. 그래서 대부분의 개발자가 직접 - 투 - 이벤트 구동 프로그램을 충족시킬 수 없다, Node.js를 응용 프로그램 수준 비동기 프로그래밍 플랫폼을 가지고 처음이다, Node.js를 항상 비동기를 증발. 노드를 접촉하는 과정 후, 많은 사람들이 정말 노드 비동기 프로그래밍을 사용하여 포기하는 단지 매우 거친 연락을 여러 콜백이다, 콜백 지옥에 빠지지 쉽지만 노드 비동기 프로그래밍은 기본적으로되어 실제로 문제를 해결했다, 이벤트에 의해 해제 될 수 있습니다 / 구독 모델 또는 약속 / Defferred 모드로, 사실, 문제 콜백 트랩을 해결하기 위해 완벽 할 수 있습니다. 사실, 대부분의 사람들이 생각하는 생각 선형에 익숙한, 그래서 동기화 프로그램이 매우 인기가있다. 그러나 단일 스레드 동기 모델, CPU 및 I / O에 작업이 중복되지 수 있으므로 성능 문제는 개발자의 앞에 배치됩니다. 대부분의 언어에서, 방법으로 해결하기 위해 일반적으로 멀티 스레드 방식의 성능을 향상시킬 수 있지만, 스레드의 다중 스레드 오버 헤드 비용뿐만 아니라 잠금 및 스레드 동기화 문제를 전환, 그래서 멀티 스레딩은 비즈니스 로직 문제의 개발자를 줄 것이다. CPU 서로를 기다리지 않고 병렬 I / O 작업, 자원 대기를보다 효율적으로 사용할 수있는 노드와 직접 비동기 프로그래밍,. ** 비동기 비 차단 IO와 IO ** 비 차단 IO 차이 것은, 바로 우리가 수행 된 최종 데이터에 의해 반환되지 완료되지 않은 전체 I / O로 인해,하지만 필요한 완전한 데이터를 얻기 위해 호출의 현재 상태를 반환 완료를 확인하기 위해 I / O 작업을 반복적으로 폴링했다. 비동기 I / O는, 후, 바닥에서, 캐시에 기록 된 데이터를 청취 작업을 완료하는 즉시 반환 후 I에게 / O 작업을 수행하는 데이터 읽기의 완료를 기다리지 않고 구현 및 응용 프로그램에 대한 성공 또는 실패 정보를 반환 할 수있다. 자원을 더 잘 할 수 있도록 ** ** Node.js를의 가장 큰 장점 비동기 프로그래밍의 장점을 기반으로 I / O 모델을 비 차단은 이벤트 구동 형, 비 블록 I / O 것은 서로 기다리지 않고 CPU 및 I / O 작업을 허용하는 것보다 그것은 사용합니다. 노드. I / O 비동기 모델 단일 스레드 때문에 Node.js를 더 적절한 I / O 집중 문제 Node.js를 지향 프로그래밍 구동이 다량 얼굴을 요청할 필요가 있기 때문에,시 차단 성능 문제 JS 프로그래밍 모델을 해결하기 위해, 대량 요청은 동시에는 한 번에 슬라이스를 요청합니다 과소비를 방지 할 필요가있다, 하나의 스레드에서 역할을합니다. 너무 오래 고성능 V8 엔진과 함께 비동기 모델 Node.js를의 합리적인 사용으로, 그것은 CPU을 발휘하고 I / O 병렬 처리를 이용 할 수 있습니다. ** ** 백 엔드 자바 스크립트가 실제 값을 반영하도록, 단일 스레드 성능 병목 현상을 깨고, 비동기 I / O 모델과 V8 엔진에 의해 비동기 프로그래밍의 어려움을 Node.js를. 비동기 프로그래밍뿐만 아니라 개발자들이 어려움을 가져올 것이다 때문이다. ** (1) ** 깊이 여러 바인딩 이벤트의 존재하에 일반적으로 덜 결합 말단에 javscript, DOM 이벤트 중첩 기능. 일반 다른 DOM 요소에 대한 다른 이벤트를 바인딩. ! [파일] (https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133629997-101116599.jpg)하지만 Node.js를 들어, 여러 비동기 장면이 풍부 호출합니다. ! [파일 (https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133630207-564054573.jpg)는 사실상 최종 결과에 대한 이러한 기능 중첩 구조는 전혀 문제되지 않지만,이 Node.js를 병렬 장점에서 비동기 I / O를 잘 사용하지 않습니다. 그리고 기능은 유지 보수의 어려움이 발생할 수 있습니다 늦게 개발자를 위해 너무 깊이 중첩. ** (2) ** 자바 스크립트 코드를 차단하지 자바와 같은 수면 () 함수이 스레드 수면, 당신이 지연 될 수 작업 만하여 setInterval ()과의 setTimeout () 두 함수. 우리가 자바 스크립트의 지연의 1 초를 구현해야 그렇다면 그것을 어떻게 할까? 사실, 대부분의 개발자는 너무 달성 될 수있다 :! [파일] (HTTPS : //img2018.cnblogs. COM / 블로그 / 201,909분의 830,272 / 830272-20190921133630451-217911039.jpg)하지만 Node.js를 그래서이 코드에 대한 모든 CPU 자원이 실행시 제공됩니다 단일 스레드 모델이라고 기억한다. 다른 모든 요청을 일으키는 원인이 무시됩니다. 그래서 우리는 :! [파일] (https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133630715-149423078.jpg)를 더 좋을 것이다에서는 setTimeout을 사용하여 코드를 다시 작성할 수 있지만, 문제는 경우가 I 나중에 시간이 0으로 설정되어, 즉시 코드가 의미하는 실행되지 않는 이유는 무엇입니까? 우리는이 질문에 대해, 나는 즉시 응답 메시지를 번호를 수있는 공공의 이익에 직접 답을 생각할 수 있습니다. Node.js를 단일 스레드이기 때문에 ** (3) 멀티 스레드 프로그래밍 모델 **, 서버의 멀티 코어 CPU, 단일 프로세스 Node.js를 사실은 충분히 많은 코어 CPU를 활용되지 않으므로 브라우저는 자바 스크립트와 UI 될 수 있습니다 분리 렌더링, 컴퓨팅 서비스를 많이 할 멀티 코어 CPU를 활용하는 것이 좋습니다 수 있습니다. 그러나 모델 개발자가 크로스 스레드 프로그래밍을 직시해야이 개발, 자바 스크립트 어려움이 어느 정도의 경로를 증가 단일 스레드 프로그래밍 가고있다. ** (4) 예외 처리 ** 우리는 캡처 이상 사용 자바 예외 처리에서 예외 처리가 시도 / 잡기 / finally 문을 통해 직접 할 수 있습니다, 사실은 매우 편리합니다. ! [파일] (https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133630945-1147187223.jpg) 그러나 앞에서 말한 이후, 적용되지 않습니다 비동기 프로그래밍이 기존의 예외 처리 비동기 프로그래밍 비동기 I / O를 제외하고는 일반적으로이 단계에서 발생하지 않기 때문에, 바로 당신이 캡처 역할을하지 않을이 코드의 시도 / 캐치 이상 동작을 수행하는이 시간을 반환하는 요청을 제출 한 후 때문에 시도 / 잡기 만 예외가이 사건의 캡처에 발생하는 경우, 이벤트의 콜백 함수 콜백 실행은 예외 발생 사실이 힘이 반환하기 때문에 노드 엔딩. 비어 있으면 JS 콜백 함수 콜의 리턴 첫 번째 인수로서 비정상적인, 그것은 즉 예외를 발생하지 않고 콜백 함수. ! [파일] 예외 checkLogin 수행 발생하는 경우 (https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133631199-1527212806.jpg) 코드 위에, 상기 제 파라미터의 콜백 함수가 아니다 잘못 빈, 우리는이 매개 변수의 잘못을 기반으로 예외를 처리 할 수있을 것입니다. ** ** 1. 비동기 프로그래밍 솔루션 이벤트가 약속 / 모드 1. 적법 절차 제어 라이브러리 프로그램 이연 세 지식 포인트 이상의 혼합 포함,이 문서는이 세 가지 프로그램을 위해 특별히 도입되지 않는 모델 1. 발행 / 구독, 다음 기사는 특정 기술에 대한 세 가지 프로그램이있을 것이다. ** ** Node.js를 비동기 동시성 제어, 우리는 아주 쉽게 병렬 비동기 발사 전화를 이용할 수 있지만, 파일 시스템이 동시 호출 많은 수의 경우 과도한 동시성 경우, 우리 서버는, 예를 들어, 부담합니다, 파일 기술자 운영 체제의 수는 순식간에 사용됩니다. 비동기 동시 프로그래밍을위한 그래서, 그것을 달성하기 쉽지만, 특정 과부하가 있어야합니다. 비동기 비동기이 방법 parallelLimit를 (제공) 핸들 비동기 호출을 제한 : 다음 주로 솔루션 과부하를 말한다. ! [파일 (https://img2018.cnblogs.com/blog/830272/201909/830272-20190921133631433-49340192.jpg) parallelLimit () 메소드는 동시의 수와 같은 것은 어떤 태스크 만 동시 일 수를 제한하기위한 파라미터이다 수 있지만 동시의 무제한. 위의 코드는, 우리는 동시에 하나의 수, 그래서 단지 동시 작업을 설정합니다. 그러나 parallelLimit ()는 하나의 단점이있다 : 당신은 동적 병렬 작업을 추가 할 수 없습니다. 그러나 비동기 대기열 () 메소드는 동적으로 파일 디렉토리 탐색 등의 작업에 매우 효율적인 병렬 작업을 추가 할 수 있습니다. 그러나 큐 (), 매개 변수가 고정되어받은 parallelLimit () 다양성을 잃었다. ! [파일] (HTTPS : //img2018.cnblogs.

추천

출처www.cnblogs.com/niyueling/p/11562819.html