Trả lời câu số 2: Để hiểu rõ hơn thì đầu tiên cần phân biệt nodejs (hoặc browser) và Javascript.
- Javascript là ngôn ngữ
- Nodejs là môi trường để thực thi Javascript, và nodejs có multithread.
Khi cầm 1 đoạn code Javascript đưa cho nodejs thực thi thì code Javascript được thực thi ở main thread, chạy đồng bộ từ trên xuống và khi gặp một cái web API hoặc I/O (fetch, setTimeout, readFile...), nó sẽ thực thi mấy cái này web API, I/O này ở thread khác (nodejs có thread pool).
Có một câu hỏi khác là "
Tại sao code Javascript được thực thi ở main thread mà mấy thằng fetch, readFile... được xử lý ở nơi khác. Vậy fetch không phải Javascript à?" => Đúng, cái thằng fetch bạn đang dùng chỉ là 1 cái API thôi, bạn dùng Javascript để tạo ra 1 yêu cầu "
get cái url này và sau khi có kết quả thì đưa vào cái callback này để xử lý".
Còn cách nó get cái url như thế nào và nhận kết quả ra sao được viết bằng C++.
Ảnh dưới là trích dẫn từ chính trang web của nodejs.
View attachment 1988811
Bài
blog post này phân tích khá rõ.