Yêu cầu song song JavaScript

Chúng tôi biết ứng dụng NodeJS là đơn luồng. Giả sử, nếu quá trình xử lý liên quan đến yêu cầu A mất 10 giây, điều đó không có nghĩa là yêu cầu xuất hiện sau yêu cầu này cần đợi 10 giây để bắt đầu xử lý vì vòng lặp sự kiện NodeJS chỉ là một luồng. Toàn bộ kiến ​​trúc NodeJS không phải là đơn luồng.  

NodeJS xử lý nhiều yêu cầu của khách hàng như thế nào?

NodeJS nhận nhiều yêu cầu của khách hàng và đặt chúng vào EventQueue. NodeJS được xây dựng với khái niệm kiến ​​trúc hướng sự kiện. NodeJS có EventLoop riêng, đây là một vòng lặp vô hạn nhận yêu cầu và xử lý chúng. EventLoop là trình lắng nghe cho EventQueue.  

Nếu NodeJS có thể xử lý yêu cầu mà không chặn I/O thì vòng lặp sự kiện sẽ tự xử lý yêu cầu và tự gửi phản hồi lại cho máy khách. Tuy nhiên, có thể xử lý song song nhiều yêu cầu bằng cách sử dụng mô-đun cụm NodeJS hoặc mô-đun worker_threads

Làm cách nào để mở rộng ứng dụng NodeJS của bạn với Mô-đun cụm?

Một phiên bản duy nhất của Node. js chạy trong một luồng duy nhất. Nếu bạn có một hệ thống đa lõi thì bạn có thể sử dụng mọi lõi. Đôi khi nhà phát triển muốn khởi chạy một cụm quy trình NodeJS để tận dụng lợi thế của hệ thống đa lõi

Mô-đun cụm cho phép dễ dàng tạo các quy trình con chia sẻ cùng một cổng máy chủ

Bước 1. Tạo một ứng dụng NodeJS và cài đặt Express cần thiết. mô-đun js

mkdir Project && cd Project
npm init -y 
npm i express

Bước 2. Tạo một chỉ mục. js trên thư mục gốc của bạn với đoạn mã sau.  

Javascript




_______46____47____48

node index.js
9
node index.js
0
node index.js
8

 

node index.js
0

node index.js
1
node index.js
2
node index.js
3

 

node index.js
4

node index.js
5

 

node index.js
6

node index.js
7
node index.js
8

node index.js
9
node index.js
10

 

node index.js
9
node index.js
12

node index.js
9
node index.js
14
node index.js
15

node index.js
16____117

node index.js
9
node index.js
19

 

node index.js
9
node index.js
21

node index.js
9
node index.js
23____224
node index.js
25

node index.js
16____227

node index.js
9
node index.js
29

node index.js
19

 

node index.js
61

_______462____463

 

node index.js
9
node index.js
65

node index.js
9
node index.js
67

node index.js
9
node index.js
69

node index.js
16____471

_______116____473____474

node index.js
75

node index.js
16____477

node index.js
9
node index.js
29

node index.js
19

 
 

Giải trình. Nếu hệ thống của bạn có 8 CPU thì 8 phiên bản NodeJS sẽ được tạo và mỗi phiên bản có vòng lặp sự kiện độc lập của riêng nó. Bây giờ NodeJS có thể xử lý song song tất cả các yêu cầu.  

Tất cả đều chia sẻ cùng một cổng (PORT 3000) nhưng không có trạng thái. Quy trình tổng thể lắng nghe trên một cổng, chấp nhận các kết nối mới và phân phối chúng cho các công nhân theo kiểu vòng tròn, với một số tính năng thông minh tích hợp để tránh làm quá tải quy trình công nhân

Bước 3. Chạy chỉ mục. js bằng lệnh sau

node index.js

đầu ra

Sử dụng mô-đun worker_threads. Giải pháp tốt nhất cho hiệu năng của CPU là Worker Thread. Mô-đun này được sử dụng trong Nút. js vì nó hữu ích để thực hiện các tác vụ JavaScript nặng

Javascript là một ngôn ngữ lập trình với một bước ngoặt đặc biệt. Mô hình hướng sự kiện của nó có nghĩa là không có gì chặn và mọi thứ chạy đồng thời. Điều này không bị nhầm lẫn với kiểu chạy đồng thời giống như chạy song song trên nhiều lõi. Javascript là một luồng đơn nên mỗi chương trình chạy trên một lõi nhưng mọi dòng mã đều thực thi mà không cần đợi bất kỳ thứ gì trả về. Điều này nghe có vẻ kỳ lạ nhưng đó là sự thật. Nếu bạn muốn có bất kỳ loại thứ tự tuần tự nào, bạn có thể sử dụng các sự kiện, cuộc gọi lại hoặc lời hứa muộn

Hãy xem một ví dụ

node index.js
2

Bây giờ bạn có thể tự hỏi setTimeout đang làm gì và về cơ bản, nó nói rằng hãy chạy chức năng này sau ngần ấy thời gian. Javascript là ngôn ngữ lập trình bậc cao, có nghĩa là bạn có thể chuyển các hàm dưới dạng đối số. Nhật ký bị trì hoãn đầu tiên sẽ in ra thiết bị xuất chuẩn sau 2 giây. Cái thứ hai sẽ in sau 1 giây

Những gì bạn có thể mong đợi để xem là

node index.js
3

Nhưng không phải vậy, cả hai sẽ được kích hoạt lần lượt cùng lúc nên đầu ra sẽ như thế này

node index.js
4

Cách truyền thống nhất để xử lý đồng thời khi bạn cần chạy các chức năng theo một thứ tự nhất định được gọi là gọi lại. Đây là khi bạn chuyển một hàm cho một hàm được chạy sau đó và đưa ra các đối số có thể được thực hiện sau đó. Đó là những gì setTimeout đang làm khi bạn truyền cho nó một hàm

node index.js
5

Bây giờ hãy xem xét một số ví dụ thực tế về đồng thời. Chúng ta sẽ tạo một hàm gửi nhiều yêu cầu HTTP, đầu tiên là hàm thực hiện gọi lại và sau đó gọi hàm đó một cách tuần tự, đồng thời và cuối cùng là song song với sự trợ giúp của mô-đun cụm

Làm cách nào để gửi yêu cầu song song trong JavaScript?

Thực hiện cuộc gọi song song trong JavaScript .
const id = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
phản hồi const = đang chờ đợi Lời hứa. tất cả các(
id. bản đồ (id không đồng bộ => {
const res = đang chờ tìm nạp (
`https. //jsonplaceholder. đánh máy. com/posts/${id}`
);

Làm cách nào để xử lý nhiều yêu cầu trong REST API JavaScript?

Xử lý các yêu cầu đồng thời trong API RESTful .
Người dùng A yêu cầu tài nguyên 1 qua điểm cuối GET
Người dùng B yêu cầu tài nguyên 1 qua điểm cuối GET
Người dùng A thực hiện các thay đổi trên tài nguyên 1 và lưu các thay đổi của nó thông qua yêu cầu PUT
Người dùng B thực hiện các thay đổi trên tài nguyên 1, trên cùng các trường với người dùng A và lưu các thay đổi của nó thông qua yêu cầu PUT

Làm cách nào để gọi hai API cùng một lúc trong JavaScript?

Nếu bạn muốn thực hiện hai yêu cầu API tìm nạp thì bạn chỉ cần sử dụng hai API tìm nạp. tìm nạp('http. //ví dụ. com/phim. json'). sau đó (phản hồi => phản hồi. json()) .

Làm cách nào để nút JS xử lý nhiều yêu cầu cùng một lúc?

NodeJS xử lý nhiều yêu cầu của khách hàng như thế nào? . NodeJS được xây dựng với khái niệm kiến ​​trúc hướng sự kiện. NodeJS có EventLoop riêng, đây là một vòng lặp vô hạn nhận yêu cầu và xử lý chúng. NodeJS receives multiple client requests and places them into EventQueue. NodeJS is built with the concept of event-driven architecture. NodeJS has its own EventLoop which is an infinite loop that receives requests and processes them.