[NodeJS] Hỏi về bất đồng bộ trong nodeJS



  • Em đang nghiêng cứu về node JS và em thấy khá mâu thuẫn chỗ này.
    Node JS chạy trên cơ chứ non-blocking và event-Driven Loop. Nhờ vậy mà node JS chỉ single thread cho nên tốc độ nhanh và nhẹ.

    • Nhưng em có những thắc mắc sau:
    • Đơn luồng thì sao nó có thể chạy được multi tasking
    • Nhờ vào bất đồng bộ nên sử lý nó được nhanh do xử lý nhiều tác vụ cùng một lúc. Nhưng đôi lúc cần phải sử dụng callback để xử lý tác vụ nặng. Nhưng như thế thì lại trở nên đồng bộ. Thế tại sao người ta lại nói đến ưu điển là bất đồng bộ rồi lại cố gáng chuyển về bất đồng bộ như những ngôn ngữ khác.


  • Bạn hiểu khái niệm bất đồng bộ ( asynchronous ) là sao ?
    Có thể nói rõ hơn để mọi người giúp bạn trả lời.
    Theo mình nghĩ thì, nodejs không có khải niệm multi tasking như một số ngôn ngữ khác, 1 lúc nó chỉ làm 1 việc duy nhất. ( mình không muốn đề cập đến cluster, vì bạn chưa cần biết )



  • @CodeConCat Bất đồng bộ là nó không xử lý các tác vụ một cách theo tuần từ. Như ví dụ ta run 2 task. 1 task tải file hình. 1 task hiển thị file hình đó. Đôi khi ta chưa chạy xong tải file hình thì nó đã hiển thị file hình rồi. Do 2 đoạn code chạy gần như cùng lúc. Vì vậy sinh ra lỗi undefind cái file hình hiển thị.
    Vì thế ta cần phải xử lý bất đồng bộ cái tải file hình trước khi hiển thị file hình ra.



  • @Long-Lê: Như bạn đã biết, ưu điểm của NodeJS là non-blocking IO và event-driven loop. Với cơ chế single thread và event-driven loop, nó giúp cho ứng dụng tận dụng tối đa resource tránh trường hợp phải chờ đợi một tác vụ.
    Vdu: ứng dụng bạn cần lưu data xuống database, thông thường database được deploy trên 1 server khác, Suốt thời gian chở để data truyền qua network thì CPU vẫn rãnh. Cho nên app server có thể phục vụ request khác. Nhưng đối với các ngôn ngữ khác thì app server phải chờ để việc lưu data xuống database thực hiện xong.
    Một vdu nữa là: Trong trường hợp integrate với FB Api, trong thời gian chờ kết quả gọi API của FB từ app server của bạn để chức thực user, app server vẫn có thể tiếp tục nhận request khác.

    Nhưng đó cũng là nhược điểm của NodeJS. Nó sẽ không xử lý hiệu quả đối với tác vụ nặng cần hiệu năng CPU như xử lý ảnh,...

    papa elf

    0

Log in to reply