ngolebaotrung
Senior Member
chạy song song nhiều thread tất nhiên là nhanh hơn single thread rồi. Xử lý hàng trăm, hàng ngàn request thì vẫn không phải nhanh lắm đâu. Quan trọng là khối lượng tính toán cơ
Thì đúng nhưng design bt nodejs nó async IO chạy single thread vẫn nhanh cho các tác vụ web căn bản. Còn chủ thớt ở đây có vẻ muốn bàn vê việc xử lý nặng muốn spam thread để xử lý 2 công việc cùng lúc. Giống làm application hơn là web serverchạy song song nhiều thread tất nhiên là nhanh hơn single thread rồi. Xử lý hàng trăm, hàng ngàn request thì vẫn không phải nhanh lắm đâu. Quan trọng là khối lượng tính toán cơ
main() {
normal()
expensive()
normal()
}
main() {
normal()
setTimeout(() => { expensive() } )
normal()
}
Tối rồi thím ơi, lót dépThím nào còn mong Nodejs nó muti-thread là éo bao giờ hiểu được bản chất của single thread lẫn miti-thread. Cứ nghĩ server phải muti-thread mới nhanh mới mạnh?
Có bao giờ não đặt câu hỏi tại sao thằng Nodejs tuy single thread nó lại có thể xử lý rất nhanh khi có cả trăm, cả ngàn request?
Tôi đánh dấu ở đây, tối rảnh sẽ giải thích. Chuẩn bị tan làm rồi, k muốn ráng ngồi lại cty.
bác giải thích cho em vớiThím nào còn mong Nodejs nó muti-thread là éo bao giờ hiểu được bản chất của single thread lẫn miti-thread. Cứ nghĩ server phải muti-thread mới nhanh mới mạnh?
Có bao giờ não đặt câu hỏi tại sao thằng Nodejs tuy single thread nó lại có thể xử lý rất nhanh khi có cả trăm, cả ngàn request?
Tôi đánh dấu ở đây, tối rảnh sẽ giải thích. Chuẩn bị tan làm rồi, k muốn ráng ngồi lại cty.
dạ em còn kém, nên hỏi/cmt có thể sai, mong các bạn bỏ quá và chỉ ra chỗ nào em sai để e học ạVậy học chưa tới ấy chứ. Thôi về nhà học bài tiếp đi.
Search google call stack, event loop js. Xem nó single thread mà sao vẫn làm webserver handle cả đống request được.
Mà nodejs cũng có worker thread đó thôi. Muốn spam thread thích thì cứ làm.
Btw thích lập trình optimize như tới từng core từng thread thì đừng xài js làm gì. Ví dụ làm game, chạy thuật toán,tool xử lý ảnh... thì người ta đương phải code mấy ngôn ngữ bậc thấp để optimize core thread. Nói chư ngay cả game giờ mới nhiều game chạy dc nhiều core. Chứ xưa game chay 2 core là ác chiến rồi.
Thấy trang này toàn Tiếng Anh bồi khó đọc lắm bác. Không có trang nào dễ hiểu hơn ạ.
Thím mới là người không hiểu vấn đề ấy, cái async await không phải là dừng thread mà nó chỉ là cách viết khác của Promise mà thôi, tức là đống code phía dưới async sẽ được nhét vào callback khi resolve ấy.bác chưa hiểu vấn đề rồi, có bài toán như chat chit cần realtime thì nó cần không có khoảng thời gian chết, còn bài toán cần tính toán nặng thì cần phải bật đa luồng, bật đa luồng ở đây là 2 đoạn code được thi song song, đó mới là ý nghĩa, chứ không phải đa luồng là nhiều core ở cpu, mình ko rõ bên phần cứng sẽ như nào, ví dụ bên python/c#/java vì hiện mình có thể bật thỏa mái số thread được mà nhỉ, đâu phải cpu 2 nhân thì chỉ bật được 2 thread.
Bạn giải thích dễ hiểu quá. Đọc cả cái thớt hiểu được mỗi comment của bạn. Vỡ ra bao nhiêu kiến thức.Thím mới là người không hiểu vấn đề ấy, cái async await không phải là dừng thread mà nó chỉ là cách viết khác của Promise mà thôi, tức là đống code phía dưới async sẽ được nhét vào callback khi resolve ấy.
Khi xử lí các request thím phải đánh giá nhiều khía cạnh xem thực chất nó nghẽn ở đâu. Nó có thể nghẽn ở database, nó có thể nghẽn ở đường truyền... Việc của CPU trong phần lớn các service viết bằng nodejs là serialize/deserialize dữ liệu rồi ném cho thằng khác xử lí. Khi số lượng request nhiều lên thì cái card mạng nó còn nghẽn trước cả CPU ấy (chưa kể đến nghẽn db nhé). Các thím đừng đánh giá thằng Nodejs yếu vì nó chỉ chạy single thread, bởi vì đơn giản các task nó xử lí tốt thì việc 1 core mạnh là quá thừa, các task khác cần đến multithread (tính toán nhiều, mã hóa ....) thì họ không dùng js nữa đâu.
bạn có thể thấy đoạn code get request kia, nó phải có kết quả mới chạy đến dòng if, tức là nó đã chờ có kết quả, như vậy là mình gọi là dừng thread.Thím mới là người không hiểu vấn đề ấy, cái async await không phải là dừng thread mà nó chỉ là cách viết khác của Promise mà thôi, tức là đống code phía dưới async sẽ được nhét vào callback khi resolve ấy.
Khi xử lí các request thím phải đánh giá nhiều khía cạnh xem thực chất nó nghẽn ở đâu. Nó có thể nghẽn ở database, nó có thể nghẽn ở đường truyền... Việc của CPU trong phần lớn các service viết bằng nodejs là serialize/deserialize dữ liệu rồi ném cho thằng khác xử lí. Khi số lượng request nhiều lên thì cái card mạng nó còn nghẽn trước cả CPU ấy (chưa kể đến nghẽn db nhé). Các thím đừng đánh giá thằng Nodejs yếu vì nó chỉ chạy single thread, bởi vì đơn giản các task nó xử lí tốt thì việc 1 core mạnh là quá thừa, các task khác cần đến multithread (tính toán nhiều, mã hóa ....) thì họ không dùng js nữa đâu.
Nếu bác muốn chạy ngay sang dòng if thì có thể ko dùng await nữa, kệ nó tự chạybạn có thể thấy đoạn code get request kia, nó phải có kết quả mới chạy đến dòng if, tức là nó đã chờ có kết quả, như vậy là mình gọi là dừng thread.
nếu không dùng await, thì có cách khác dùng callback, nếu dùng callback thì đoạn phía phía sau được thực thi mà không cần chờ kết quả-khi đó sẽ hiệu quả hơn do cpu được dùng ngay ko phải chờ
View attachment 875443
Async callbacks
Async callbacks are functions that are specified as arguments when calling a function which will start executing code in the background. When the background code finishes running, it calls the callback function to let you know the work is done, or to let you know that something of interest has happened. Using callbacks is slightly old-fashioned now, but you'll still see them in use in a number of older-but-still-commonly-used APIs.
Bạn đọc thêm nhiều sách/bài viết về javascript thì bạn mới hiểu bản chất. Bây giờ bạn thử đặt 1 cái setTimeout trước cái await ấy, xong xem cái body của setTimeout thực thi trước hay cái if else phía dưới thực thi trước là hiểu. Javascript là single thread, nếu wait cái request này (theo như giải thích của bạn) thì body của setTimeout sẽ chạy sau cái if else.bạn có thể thấy đoạn code get request kia, nó phải có kết quả mới chạy đến dòng if, tức là nó đã chờ có kết quả, như vậy là mình gọi là dừng thread.
nếu không dùng await, thì có cách khác dùng callback, nếu dùng callback thì đoạn phía phía sau được thực thi mà không cần chờ kết quả-khi đó sẽ hiệu quả hơn do cpu được dùng ngay ko phải chờ
View attachment 875443
Callback nó được thực hiện ngay sau khi cái hàm gọi callback xử lý xong nha bác.bạn có thể thấy đoạn code get request kia, nó phải có kết quả mới chạy đến dòng if, tức là nó đã chờ có kết quả, như vậy là mình gọi là dừng thread.
nếu không dùng await, thì có cách khác dùng callback, nếu dùng callback thì đoạn phía phía sau được thực thi mà không cần chờ kết quả-khi đó sẽ hiệu quả hơn do cpu được dùng ngay ko phải chờ
View attachment 875443
Thím vẫn hiểu sai, như thím kia nói thì async/await chẳng qua là cách viết khác của promise. Còn promise thực chất là cách thay thế cho callback để sử dụng các asynchronous operation, nhằm giải quyết vấn đề callback hell của JS ngày xưa.bạn có thể thấy đoạn code get request kia, nó phải có kết quả mới chạy đến dòng if, tức là nó đã chờ có kết quả, như vậy là mình gọi là dừng thread.
nếu không dùng await, thì có cách khác dùng callback, nếu dùng callback thì đoạn phía phía sau được thực thi mà không cần chờ kết quả-khi đó sẽ hiệu quả hơn do cpu được dùng ngay ko phải chờ
View attachment 875443