Việc nắm bắt những kiến thức chi tiết về NodeJS sẽ giúp bạn xây dựng các ứng dụng web một cách đơn giản và mở rộng cơ hội nghề nghiệp trong tương lai. Trong bài viết này, chuyên gia của CO-WELL Asia sẽ chia sẻ chi tiết thông qua một số câu hỏi phổ biến về NodeJS.
1. Call stack là gì?
Call stack là một phần của V8. Đây là cấu trúc dữ liệu mà V8 sử dụng để theo dõi việc gọi function. Mỗi khi chúng ta gọi một function, V8 đặt một tham chiếu đến function đó trên Call stack và nó tiếp tục làm như vậy đối với mỗi lệnh gọi lồng nhau của các function khác. Cơ chế này cũng áp dụng cho các function đệ quy.
Khi một function kết thúc (tính cả những lệnh gọi lồng nhau), V8 sẽ đưa function đó ra khỏi call stack và sử dụng giá trị trả về của function đó. Hãy ghi nhớ điều cơ bản này vì trong một Node process thì chỉ có một call stack. Nếu làm call stack này quá tải, tức là làm quá tải cả Node process. Hãy chú ý nhé!
2. Event loop là gì và có thuộc V8 hay không?
Event loop không thuộc V8, event loop thuộc libuv. Event loop được tạo ra để xử lý những external event và chuyển chúng thành các lệnh callback. Hiểu đơn giản là event loop lấy các event từ “event queue” và đẩy những callback của các event này vào Call stack.
Nhìn vào sơ đồ trên, bạn có thể hiểu rõ hơn về vai trò của Event loop. Event loop nằm ở trung tâm của sơ đồ này, chi phối hoạt động của V8, Node APIs, và queue. Khi Call stack của V8 rỗng, event loop có thể quyết định được chương trình sẽ làm gì tiếp theo.
3. Hệ thống Node sẽ ra sao khi cả Call stack và queue của Event loop rỗng?
Đơn giản là chương trình sẽ kết thúc. Khi chạy một chương trình Node, chương trình sẽ tự động khởi động event loop và khi event loop không hoạt động, chương trình sẽ dừng.
Để giữ cho process của Node chạy liên tục, bạn phải giữ cho queue của event loop không bị rỗng. Việc tạo ra một http server chính là đã yêu cầu Event loop chạy, liên tục kiểm tra và lắng nghe những event.
4. Các external dependencies mà Node sử dụng ngoài V8 và libuv
Ngoài V8 và libuv, Node còn sử dụng những dependencies khác như: http-parser, c-ares, OpenSSL, zlib,… Node chỉ đơn thuần là sử dụng những thư viện này, chúng đều có source riêng và có license riêng.
Vì sao bạn nên biết điều này ư? Vì trong một số trường hợp, hệ thống của bạn bị crash, và có thể liên quan đến stack trong zlib hay một phần nào đó thuộc các thư viện này, đừng vội đổ lỗi hoàn toàn cho Node nhé!
5. Nếu không có V8, Node có chạy được không?
V8 đóng vai trò là VM để Node process chạy trên đó. Nếu không sử dụng V8, bạn hoàn toàn có thể dùng một Engine khác đó là Chakra.
6. Điểm khác nhau giữa module.exports và exports là gì?
Bạn có thể dùng module.exports để xuất API thuộc module của bạn. Và tương tự, những trường hợp đó bạn đều có thể dùng exports, ngoài trừ trường hợp này:
Vì exports chỉ là một tham chiếu hay là một tên gọi tắt của module.exports. Nếu bạn thay đổi exports thì chính là thay đổi tham chiếu chứ không phải là đang thay đổi API gốc (module.exports).
7. Vì sao một biến khai báo đầu file (top level variable) lại không phải là biến toàn cục (global variable)?
Trong file module1.js bạn khai báo 1 biến var x = 1. File module2.js bạn require module1.js. Và từ file Module2.js bạn thử access vào biến x, kết quả bạn nhận được sẽ là undefined. Nếu bạn làm việc này tương tự trên browser, thì tất cả những biến được define trong file Module1.js thì file Module2.js sẽ sử dụng được.
Có sự khác biệt này là do mỗi file của Node để được đóng gói thành IIFE (là tất cả các biến của mỗi file đều được đóng gói lại riêng biệt).
8. Sẽ thế nào khi 2 module require nhau?
Nếu bạn để 2 module1.js và module2.js require lẫn nhau thì hoàn toàn không xảy ra lỗi đâu, với Node bạn có thể làm vậy tuy nhiên có thể xảy ra trường hợp không mong muốn.
Ví dụ khi thực hiện module1 và require module2, nhưng module2 lại cần module1, mà khi đó module1 chưa thực hiện xong, nên kết quả là module1 chỉ nhận được 1 phần của module2 mà thôi.
Huy CV – CO-WELL Asia
Trên đây là những hướng dẫn từ cơ bản tới chi tiết của chuyên gia từ CO-WELL Asia về NodeJS. Đừng quên theo dõi chuyên mục CODEWELL trên website CO-WELL Asia để đón đọc những bài viết công nghệ bổ ích nhé!
Top 22 event loop là gì viết bởi Cosy
Node.js là gì? Vòng lặp sự kiện Event Loop trong Node.js là gì?
- Tác giả: exibart.com
- Ngày đăng: 08/14/2022
- Đánh giá: 4.96 (646 vote)
- Tóm tắt: Cơ chế hoạt động của Event Loop trong Nodejs là gì? Event Loop hoạt động ngay khi khởi chạy Nodejs, thông tin đầu vào REPL gồm các hàm không đồng bộ, schedule …
So sánh Concurrency với Event Loop và hướng kết hợp cả hai – Noron
- Tác giả: noron.vn
- Ngày đăng: 11/16/2022
- Đánh giá: 4.72 (280 vote)
- Tóm tắt: Cách lập trình này có tên là Thread Safe Programming, bởi chỉ duy nhất một tác vụ được xử lý tại một thời điểm, và nếu bạn muốn thay đổi thứ gì đó, nó nên xảy …
Tìm hiểu về vòng lặp sự kiện (Event Loop) trong node.js
- Tác giả: 2coffee.dev
- Ngày đăng: 01/23/2023
- Đánh giá: 4.26 (493 vote)
- Tóm tắt: Event Loop là gì? … Event Loop là thứ cho phép node.js thực hiện các tác vụ I/O không đồng bộ, mặc dù trên thực tế Javascript là đơn luồng bằng …
- Nội Dung: Chúng tôi không chịu trách nhiệm đối với bất kỳ sự thiệt hại, tổn thất, rủi ro do việc khai thác sử dụng thông tin trên website chưa được tìm hiểu, xác minh chính xác bằng các biện pháp luật pháp cho phép và được điều khoản điều kiện này quy định; …
Event Loop – Cách Javascript runtime hoạt động
- Tác giả: aithietke.com
- Ngày đăng: 02/09/2023
- Đánh giá: 4.08 (519 vote)
- Tóm tắt: Engine V8; Call Stack; Javascript Runtime; Event Loop và Callback queue; Tổng kết … là do mình tự tìm hiểu và học từ người khác nếu có sai sót gì mong mọi …
- Nội Dung: Tại sao lại như vậy? Nếu theo Call Stack ta vừa tìm hiểu ở trên thì hàm setTimeout sẽ được cho vào Call Stack trước và câu lệnh console.log(‘Asynchronous’) phải được thực thi trước thì Asynchronous phải được log ra rồi sau đó đến Final chứ tại sao …
Tự học Node.js cơ bản để đi phỏng vấn (13 bài) – 4 – Event loop
- Tác giả: hocweb.vn
- Ngày đăng: 07/30/2022
- Đánh giá: 3.88 (434 vote)
- Tóm tắt: … kiện (event loop) cho phép mô hình I/O không chặn của Node, đây là … Các giai đoạn của vòng lặp sự kiện: chúng làm gì, thứ tự chạy và …
- Nội Dung: Nếu bạn đã quen thuộc với vòng lặp sự kiện JavaScript , thì bạn sẽ cảm thấy quen thuộc với các vi tác vụ, hoạt động theo cách tương tự trong Node. Nếu bạn muốn xem lại vòng lặp sự kiện và hàng đợi vi tác vụ, hãy xem Vòng lặp sự kiện trên HTML Living …
Cách JavaScript hoạt động phía sau “cánh gà”
- Tác giả: hocjavascript.net
- Ngày đăng: 12/15/2022
- Đánh giá: 3.59 (297 vote)
- Tóm tắt: JavaScript Engine; JavaScript Runtime Environment; Call Stack; Concurrency và Event Loop. Kết luận. JavaScript là một trong những ngôn ngữ …
- Nội Dung: Trên đây là những kiến thức cơ bản nhất về cách JavaScript hoạt động. Tất nhiên là nó vẫn chưa đủ. Ta phải đi sâu nữa vào từng phần để hiểu rõ hơn về cách JavaScript hoạt động nếu bạn muốn trở thành 1 Software Architect về các “công nghệ lõi”. Nhưng …
Cơ chế bất đồng bộ trong Javascript
- Tác giả: howkteam.vn
- Ngày đăng: 02/05/2023
- Đánh giá: 3.52 (278 vote)
- Tóm tắt: Queue là hàng đợi theo kiểu FIFO (First In First Out) có nghĩa cái gì vào trước là xử lý trước. Event Loop: có thể giải thích đơn giản là nó là một vòng lặp …
- Nội Dung: Mặt tốt của bất đồng bộ là giúp chúng ta xử lý nhiều công việc xen kẽ với nhau để tiết kiệm thời gian. Mặt xấu là làm chương trình mình viết phức tạp lên, và ta phải hiểu rõ nguyên lý hoạt động của bất đồng bộ, nếu không sẽ dính những trường hợp như …
- Tác giả: mindx.hashnode.dev
- Ngày đăng: 01/18/2023
- Đánh giá: 3.32 (583 vote)
- Tóm tắt: Như các bạn học JavaScript đều biết, chúng mình đều có thể viết JS ngay trên trình duyệt Web (browser) như Chrome, Edge, Cốc Cốc hay Firefox …
- Nội Dung: Mặt tốt của bất đồng bộ là giúp chúng ta xử lý nhiều công việc xen kẽ với nhau để tiết kiệm thời gian. Mặt xấu là làm chương trình mình viết phức tạp lên, và ta phải hiểu rõ nguyên lý hoạt động của bất đồng bộ, nếu không sẽ dính những trường hợp như …
Events trong NodeJS
- Tác giả: freetuts.net
- Ngày đăng: 04/14/2023
- Đánh giá: 3.11 (389 vote)
- Tóm tắt: Hiểu đơn giản event loop là một vòng lặp vô tận có nhiệm vụ lắng nghe các event. Nhiệm vụ của nó rất đơn giản là đọc các stack và event queue rồi đưa vào lại …
- Nội Dung: Sau khi tìm hiểu về các khái niệm cơ bản ở phần trên, chúng ta sẽ đi tìm hiểu về event loop là gì và cách hoạt động của nó. Để hiểu rõ về cách hoạt động của event loop thì bạn phải đọc các khái niệm ở phần trên và về bài về Callback trong NodeJS …
nguyentien98 / Call stack và Event Loop trong javascript.md
- Tác giả: gist.github.com
- Ngày đăng: 10/16/2022
- Đánh giá: 2.81 (145 vote)
- Tóm tắt: Call stack là gì. Call stack là một cấu trúc dữ liệu với đặc điểm là: FILO(First in – Last out). Trong Javascript, call stack được sử dụng để quản lý thứ tự …
- Nội Dung: Vậy thì tại sao lại sinh ra bất đồng bộ? Vì các Engine Javascript đặc biệt là V8 Engine được sử dụng trên các Browser cho việc thông dịch Javascript. Giả sử như 1 button được gọi và nó có chứa 1 hàm setInterval và có thời gian là 5 phút chẳng hạn. …
Tại sao Javascript là single t… | Careerly
- Tác giả: careerly.vn
- Ngày đăng: 09/30/2022
- Đánh giá: 2.78 (62 vote)
- Tóm tắt: Đáp án chính là nhờ Event-loop Event loop là gì? Event loop là 1 design pattern giúp thực thi code 1 cách bất đồng bộ chỉ với 1 thread.
- Nội Dung: Vậy thì tại sao lại sinh ra bất đồng bộ? Vì các Engine Javascript đặc biệt là V8 Engine được sử dụng trên các Browser cho việc thông dịch Javascript. Giả sử như 1 button được gọi và nó có chứa 1 hàm setInterval và có thời gian là 5 phút chẳng hạn. …
JavaScript: Tổng quan về engine, runtime, call stack, single-threaded, concurrency, event loop…
- Tác giả: blogchanhday.com
- Ngày đăng: 12/07/2022
- Đánh giá: 2.69 (85 vote)
- Tóm tắt: Còn event loop và callback queue là gì? Chúng đóng vai trò như thế nào trong JS Runtime? Mời các bạn đọc tiếp phần dưới.
- Nội Dung: Vậy thì tại sao lại sinh ra bất đồng bộ? Vì các Engine Javascript đặc biệt là V8 Engine được sử dụng trên các Browser cho việc thông dịch Javascript. Giả sử như 1 button được gọi và nó có chứa 1 hàm setInterval và có thời gian là 5 phút chẳng hạn. …
Hiểu về bất đồng bộ trong JavaScript
- Tác giả: career.vinid.net
- Ngày đăng: 01/16/2023
- Đánh giá: 2.49 (103 vote)
- Tóm tắt: Event loop, web APIs và Message queue không thuộc về JavaScript engine, nó là một phần của Browser’s JavaScript runtime environment (Browser) hay Nodejs …
- Nội Dung: Việc thực hiện những tác vụ như xử lý hình ảnh thường rất tốn thời gian để hoàn thành. Vì vậy khi hàm processImage() được gọi, nó cần khá lâu để hoàn thành, tuỳ vào kích cỡ của file ảnh đang được xử lý. Sau khi processImage() kết thúc, nó được lấy …
Bất đồng bộ trong Python – Event loop | Phần 2
- Tác giả: nkthanh.dev
- Ngày đăng: 01/13/2023
- Đánh giá: 2.51 (177 vote)
- Tóm tắt: Một event loop (hay một vòng lặp sự kiện) là một vòng lặp (vô hạn hoặc hữu hạn), nó duyệt qua tất cảc các task và thực thi chúng. Vòng lặp sự …
- Nội Dung: Sau khi task thực thi xong một phần (chưa kết thúc), nó sẽ trả quyền điều khiển về cho người gọi (vòng lặp sự kiện) sau khi đã thay đổi và lưu trạng thái nội tại của nó. Lúc này, vòng lặp sự kiện đã có quyền điều khiển chương trình và sẽ đẩy task …
Event loop in javascript
- Tác giả: juliandong.com
- Ngày đăng: 03/09/2023
- Đánh giá: 2.4 (181 vote)
- Tóm tắt: Event loop là gì? Advertisement. Như ta đã biết, JavaScript là single-threaded, tuy nhiên nó vẫn có khả năng xử lý …
- Nội Dung: Sau khi task thực thi xong một phần (chưa kết thúc), nó sẽ trả quyền điều khiển về cho người gọi (vòng lặp sự kiện) sau khi đã thay đổi và lưu trạng thái nội tại của nó. Lúc này, vòng lặp sự kiện đã có quyền điều khiển chương trình và sẽ đẩy task …
12 Câu Hỏi Phỏng Vấn Node.JS Phổ Biến Nhất Và Gợi Ý Trả Lời
- Tác giả: glints.com
- Ngày đăng: 07/09/2022
- Đánh giá: 2.23 (135 vote)
- Tóm tắt: js là gì? REPL trong Node.js là gì? Event-loop trong Node JS là gì? Làm thế nào để Node.js hỗ trợ các nền tảng đa bộ xử lý và nó có sử dụng đầy …
- Nội Dung: Khi chúng ta bắt đầu sử dụng cụm trong ứng dụng Node.js phía sau cảnh, nhiều quy trình Node.js được tạo nhưng cũng có một quy trình gốc được gọi là trình quản lý cụm chịu trách nhiệm theo dõi tình trạng của các phiên bản riêng lẻ trong ứng dụng của …
Phân biệt microtask và macrotask trong event loop
- Tác giả: daynhauhoc.com
- Ngày đăng: 06/26/2022
- Đánh giá: 2.13 (153 vote)
- Tóm tắt: Mục đích V8 engine chia ra 2 loại queue này để làm gì? … Tại sao promise là microtask, còn setTimeout là macrotask mà không phải ngược lại?
- Nội Dung: Khi chúng ta bắt đầu sử dụng cụm trong ứng dụng Node.js phía sau cảnh, nhiều quy trình Node.js được tạo nhưng cũng có một quy trình gốc được gọi là trình quản lý cụm chịu trách nhiệm theo dõi tình trạng của các phiên bản riêng lẻ trong ứng dụng của …
Event Loop trong Node.js
- Tác giả: viettuts.vn
- Ngày đăng: 11/02/2022
- Đánh giá: 2.04 (145 vote)
- Tóm tắt: Node.js là ứng dụng đơn luồng nhưng có hỗ trợ việc xử lí đồng thời thông qua các định nghĩa về event (sự kiện) và callback. Tất cả các API của Node.js có …
- Nội Dung: Ở đây, fs.readFile() là một hàm không đồng bộ với mục đích để đọc file. Nếu có một lỗi xảy ra trong quá trình đọc file, đối tượng err sẽ chứa lỗi đó, nếu không thì data sẽ chứa các phần nội dung của file đó. Hàm readFile truyền err và data đến hàm …
Async/Non-Blocking trong JS với ES6 (phần 1) javascript 145 ES6 15 es8 2 Async 5 Non-Blocking 2 Promise 3
- Tác giả: kipalog.kaopiz.com
- Ngày đăng: 10/15/2022
- Đánh giá: 2.08 (59 vote)
- Tóm tắt: Liệu những cái đó là cái gì ? Có khó không ? Bài nà… … JavaScript là ngôn ngữ được xây dựng theo mô hình event loop. Nó khác những ngôn ngữ đồng bộ …
- Nội Dung: Một lưu ý nữa là về kết quả Non-Blocking thể hiện giống như việc chạy đa luồng (multithread) tuy nhiên về bản chất, Non-Blocking không phải đa luồng mà là Singlethread các tác vụ xoay vòng trong Processing Queue. Cái này nếu có thời gian, mình sẽ …
Trực quan hóa kiến thức Event Loop trong javascript
- Tác giả: spacedev.vn
- Ngày đăng: 12/21/2022
- Đánh giá: 1.89 (195 vote)
- Tóm tắt: Nhưng trước tiên, Event Loop là gì và tại sao bạn nên quan tâm? JavaScript là đơn luồng: Chỉ một nhiệm vụ có thể chạy cùng một lúc.
- Nội Dung: Một lưu ý nữa là về kết quả Non-Blocking thể hiện giống như việc chạy đa luồng (multithread) tuy nhiên về bản chất, Non-Blocking không phải đa luồng mà là Singlethread các tác vụ xoay vòng trong Processing Queue. Cái này nếu có thời gian, mình sẽ …
Cơ chế hoạt động của javascript và nodejs
- Tác giả: blog.daovanhung.com
- Ngày đăng: 11/29/2022
- Đánh giá: 1.83 (188 vote)
- Tóm tắt: event loop trong javascript. … Nodejs là ngôn ngữ javascript chạy trên server, có ưu điểm là thực thi nhanh, bất đồng bộ.
- Nội Dung: 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, …
Javascript: Event Loop và Call Stack là gì?
- Tác giả: thaunguyen.com
- Ngày đăng: 05/29/2022
- Đánh giá: 1.68 (151 vote)
- Tóm tắt: Event Loop: là một Queue, tất cả cá event được push vào Queue này, mỗi khi một sự kiện được phát ra nó sẽ được push vào Queue.
- Nội Dung: Trên đây là một ví dụ đơn giản về cách thức hoạt động bên trong của Javascript. Bạn sẽ hiểu được tại sao Javascipt chỉ là đơn luồng và đồng bộ. Nó chỉ có một Call Stack nên được gọi là đơn luồng và các câu lệnh sẽ được thực thi tuần tự trong Stack …