• About
  • Advertise
  • Privacy & Policy
  • Contact
NQ NEWS
  • Kiến thức tổng hợp
    • Development
    • Deep Learning
    • Cloud Computing
    • Kiến thức bảo mật
    • Tin học văn phòng
  • Thủ thuật
    • Phần Mềm
    • Sửa lỗi máy tính
    • Bảo mật máy tính
    • Tăng tốc máy tính
    • Thủ thuật Wifi
  • Quản trị hệ thống
    • Giải pháp bảo mật
    • Mail Server
    • Mạng LAN – WAN
    • Máy chủ
    • Windows Server 2012
  • Tin tức
No Result
View All Result
  • Kiến thức tổng hợp
    • Development
    • Deep Learning
    • Cloud Computing
    • Kiến thức bảo mật
    • Tin học văn phòng
  • Thủ thuật
    • Phần Mềm
    • Sửa lỗi máy tính
    • Bảo mật máy tính
    • Tăng tốc máy tính
    • Thủ thuật Wifi
  • Quản trị hệ thống
    • Giải pháp bảo mật
    • Mail Server
    • Mạng LAN – WAN
    • Máy chủ
    • Windows Server 2012
  • Tin tức
No Result
View All Result
NQ NEWS
No Result
View All Result
Home Kiến thức tổng hợp

Cơ chế hoạt động của Javascript và NodeJS

@admiz by @admiz
01/06/2021
in Kiến thức tổng hợp
0
Cơ Chế Hoạt động Của Javascript Và Nodejs 60b5b66c238bf.jpeg

Trong bài viết này, NQ News Cloud xin giới thiệu cơ chế hoạt động của Javascript và NodeJS ngay tại bài viết này nhé. 

Non-blocking I/O 

Trong JavaScript, hầu hết các lời gọi I/O đều là non-blocking. Nghĩa là khi có HTTP request, truy xuất dữ liệu trong DB hoặc đọc ghi vào bộ nhớ thì hệ thống sẽ không tạm dừng (blocking) các đoạn code tiếp theo (như các ngôn ngữ server khác PHP, Ryby,…) mà sẽ trao quyền thực thi những lời gọi I/O này cho hệ thống và thực thi những đoạn code tiếp theo, khi hệ thống đã thực thi xong những lời gọi hệ thống này thì hàm callback truyền vào sẽ tự động được gọi.

Ví dụ về blocking trong Ruby:

response = Faraday.get ‘http://www.google.com’

puts response

puts ‘Done!’

Trình tự hệ thống thực hiện đoạn code trên là:

• Request tới http://www.google.com, lúc này hệ thống sẽ tạm dừng (blocking) để chờ kết qủa của request này trả về.

• Thông tin trả về và được gán vào biến response.

• Hiển thị response được trả về lên màn hình.

• Hiển thị ‘Done’ lên màn hình.

Thứ tự thực hiển của các ngôn ngữ server thông thường (như PHP, Ruby) sẽ thực hiện kiểu synchronous (đồng bộ) từ trên xuống dưới như flow trên. Còn dưới đây là ví dụ về trình tự thực thi trong NodeJS (JavaScript):

request(‘http://www.google.com’, function(error, response, body) {

console.log(body);

);

console.log(‘Done!’);

Lưu ý: Đoạn code trên cũng sẽ được gọi theo thứ tự từ trên xuồng dưới.

• Câu lệnh đầu tiên sẽ gọi request tới http://www.google.com, không như trên, ở đây hệ thống sẽ không đợi kết qủa trả về mới thực thi tiếp. Hệ thống sẽ truyền hàm callback ở trên vào event loop để khi hàm request có kết qủa trả về thì sẽ thực thi hàm callback này ngay. Sau khi truyền hàm callback vào event loop thì hệ thống sẽ tiếp tục thực hiện câu lệnh phía dưới.

• In ra màn hình ‘Done!’

• Vào thời điểm nào đó sau đó, khi request có kết qủa trả về thì hàm callback sẽ được gọi và in ra body của response.

Code như trên gọi là assynchronous (bất đồng bộ), nghĩa là hệ thống có thể thực hiện các đoạn code của mình một cách đồng thời(như vd trên Done! được in ra trước body trả về).

Event Loop

Trình khởi chạy của JavaScript có một hàng đợi (queue) chứa các messages, các messages này được gắn liền với các hàm callback truyền vào. Mỗi khi gặp câu lệnh có callback truyền vào thì message gắn với callback đó sẽ được đẩy vào queue, và khi các event được trigger( ví dụ như event click, event request có response trả về) thì hệ thống sẽ gọi hàm callback tương ứng để thực thi. Khi một event ví dụ như click vào button nhưng không truyền vào callback thì sẽ không có message nào được đẩy vào queue, nghĩa là chỉ những event có callback tryền vào thì mới được đẩy vào queue.

Ảnh 3.

Hình trên mô tả hoạt động của Event Loop. Khi có trigger(sự kiện click hoặc request ở vd trên thực hiện xong và có response trả về) thì hàm callback truyền vào sẽ được đẩy vào Massage Queue.

Khi biên dịch đoạn code ban đầu thì các dòng lệnh assyn của bạn sẽ được đẩy vào stack, khi các dòng lệnh này chạy từ đầu tới cuối (chúng chạy song song với các tiến trình truy cập I/O nói ở trên) và khi chạy xong câu lệnh cuối cùng rồi thì stack sẽ về rỗng. Một khi stack về rỗng (chạy xong thân code của bạn), vòng lặp Event Loop sẽ được khởi chạy. Mỗi khi Event Loop gặp một messagetrong Message Queue, nó sẽ thực thi hàm callback gắn với message đó bằng cách đẩy các đoạn code trong hàm callback vào stack. Sau khi hàm callback đó thực hiện xong, stack về rỗng, thì Event Loop tiếp tục chạy và lấy message tiếp theo (nếu có) ra và đẩy code của callback vào stack thực thi.

NodeJS xử lý nhiều request cùng lúc như thế nào?

Như giải thích ở phần 2, NodeJS là single thread non-blocking, nên các request tới sau sẽ được thực hiện ngay sau khi thân code của request thứ nhất được thực hiện xong, thân code ở đây là mọi thứ đang có trong call stack và message queue, những callback nằm trong message queue là những callback đã có kết quả trả về, còn những callback thuộc về request thứ nhất mà chưa có kết quả trả về sẽ chưa được đẩy vào message queue.

Câu hỏi đặt ra là request thứ hai tới sẽ được đặt ở đâu để chờ cho request thứ nhất thực hiện xong, request cũng là một event nên nó sẽ được đặt vào message queue, khi các callback được đẩy vào message queue trước request thứ 2 này được thực hiện xong thì request thứ hai này mới được lấy ra vào cho vào call stack để thực hiện. Ở điểm này có thắc mắc là nếu request thứ hai thay đổi biến global của chương trình và request thứ nhất vẫn còn callback (gọi là callback A) được đẩy vào message queue sau request thứ hai và callback A này lại cần dữ liệu của biến global đó thì chẳng phải là callback A đã truy cập sai dữ liệu dẫn tới request thứ nhất trả về kết quả sai sao?

Kết luận rút ra:

• Các lời gọi I/O là assync (nhiều I/O được thực hiện cùng 1 lúc).

• Các lời gọi hàm của bạn là sync (Code của bạn chạy tuần tự từ trên xuống dưới).

• Các hàm callback sẽ chạy sau khi thân code của bạn thực thi xong.

• Các hàm callback sẽ chạy tuần tự theo thứ tự callback nào được trigger trước sẽ chạy trước chứ không phải các hàm callback được chạy đồng thời.

=> Đây chính là single thread trong NodeJS. Nghĩa là chỉ có một tiến trình được chạy trong code của bạn (Còn những lời gọi I/O assyn là của hệ thống gọi multi thread).

Theo Kipalog

>> Tham khảo thêm: Callback function và Higher-order function trong JavaScript

Post Views: 117
Previous Post

27 Cú pháp SQL cơ bản phải biết

Next Post

Promise – Lời hứa ngọt ngào trong Javascript (P.1)

Related Posts

Sửa Nhanh Lỗi Laptop Windows 10 Sạc Pin Không Vào 60951215e059b.png
Phần cứng

Sửa nhanh lỗi laptop Windows 10 sạc pin không vào

11/05/2022
Làm Thế Nào để Xóa Một Phân Vùng Trên ổ đĩa Cứng Windows? 60951232be65c.png
Phần cứng

Làm thế nào để xóa một phân vùng trên ổ đĩa cứng Windows?

11/05/2022
Test Pin Laptop, Cách Kiểm Tra Pin Laptop đang ở Mức Nào Mà Không Cần Cài Phần Mềm 6095123831651.png
Phần cứng

Test pin laptop, cách kiểm tra pin laptop đang ở mức nào mà không cần cài phần mềm

11/05/2022
Hướng Dẫn Xử Lý Khi Key Bàn Phím Laptop Bị Hỏng 6095121ca32df.png
Phần cứng

Hướng dẫn xử lý khi key bàn phím laptop bị hỏng

11/05/2022
Nên Dùng Súng Loại Nào Trong Chiến Dịch Huyền Thoại? 6094aaf17f1da.png
Phần Mềm

Nên dùng súng loại nào trong Chiến Dịch Huyền Thoại?

07/05/2022
Hướng Dẫn Cài đặt Wtfast để Giảm Ping Khi Chơi Game Online, Khi đứt Cáp 6094aae16ee4b.png
Phần Mềm

Hướng dẫn cài đặt WTFast để giảm ping khi chơi game online, khi đứt cáp

07/05/2022
Next Post
Promise – Lời Hứa Ngọt Ngào Trong Javascript (p.1) 60b5b6712782b.png

Promise - Lời hứa ngọt ngào trong Javascript (P.1)

Bài mới nhất

Tổng Hợp 10 Mẫu Email Marketing Giới Thiệu Sản Phẩm Nổi Bật Nhất Hiện Nay 612d0da97658c.png

Tổng hợp 10 mẫu email marketing giới thiệu sản phẩm nổi bật nhất hiện nay

07/05/2025
Dịch Vụ Thiết Kế Website Tại Hải Dương Chuyên Nghiệp, ấn Tượng Và Uy Tín 612d25752b14f.png

Dịch vụ thiết kế website tại Hải Dương chuyên nghiệp, ấn tượng và uy tín

06/05/2025
Top Công Ty Thiết Kế Website Tại Biên Hòa Chuyên Nghiệp, Chuẩn Seo 612d259494e93.jpeg

Top công ty thiết kế website tại Biên Hòa chuyên nghiệp, chuẩn SEO

06/05/2025
Top Công Ty Thiết Kế Website Tại Vinh – Nghệ An Uy Tín 612d259a9cae3.jpeg

Top công ty thiết kế website tại Vinh – Nghệ An uy tín

05/05/2025
Top 10 Công Ty Thiết Kế Website Tại Nha Trang Chuyên Nghiệp 612d0a9ad018b.jpeg

Top 10 công ty thiết kế website tại Nha Trang chuyên nghiệp

05/05/2025

Danh mục

  • Android
  • Bảo mật máy tính
  • Bảo mật, Antivirus
  • Chuyện công nghệ
  • Deep Learning
  • Development
  • Dịch vụ công trực tuyến
  • Dịch vụ nhà mạng
  • Giải pháp bảo mật
  • Hệ thống
  • Hệ thống
  • iPhone
  • Kiến thức bảo mật
  • Kiến thức cơ bản phổ thông
  • Kiến thức Marketing căn bản
  • Kiến thức tổng hợp
  • Lập trình
  • Linux
  • Linux OS
  • macOS
  • Mail Server
  • Mạng LAN – WAN
  • Máy ảo
  • Máy chủ
  • ms excel
  • ms-powerpoint
  • Nền tảng điện toán đám mây
  • Phần cứng
  • Phần Mềm
  • Quản trị hệ thống
  • Raspberry Pi
  • Sửa lỗi máy tính
  • Tăng tốc máy tính
  • Thủ thuật
  • Thủ thuật SEO
  • Thủ thuật Wifi
  • Tiện ích hệ thống
  • Tin học văn phòng
  • Tin tức
  • Uncategorized
  • Ứng dụng
  • Website
  • Windows Server 2012

Thẻ

#app #chatbot #chatbot tự động #CRM #Kiến thức cơ bản #Techblog #Thiết kế website Android apple CPU Email Marketing Google Google Drive hacker HTML hàm python hàm python có sẵn hình nền hình nền máy tính học css học python học SQL ios iphone iphone 12 iPhone X macos Microsoft mssql MS SQL Server ngôn ngữ lập trình python Raspberry Pi Samsung smartphone SQL SQL Server tham số trong C thủ thuật windows 10 tài liệu python windows windows 10 YouTube điện thoại thông minh ứng dụng
  • About
  • Advertise
  • Privacy & Policy
  • Contact

© 2022 Pha Le Solution

No Result
View All Result
  • Home

© 2022 Pha Le Solution