Non Blocking Io Là Gì

Chào các bạn, dạo gần đây, mình có viết một chuỗi các bài viết về Javascript. Tuy nhiên, các bài viết trước đây mình chủ yếu viết về ReactJS, hoặc javascript phía front-end. Thế thì hôm nay, nhân một ngày Hà Nội trái gió trở trời, mình xin được viết về javascript phía server nhé.Chủ đề mà hôm nay mình muốn giới thiệu với các bạn đó là NodeJS - một cái nhìn tổng quan nhất.

Bạn đang xem: Non blocking io là gì

Bạn đang xem: Non blocking io là gì

NodeJS là gì vậy ?

Sau đây là định nghĩa mình tìm được trêntrang chủcủa NodeJS:

Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.

Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

Đúng như thiên hạ nói, NodeJS là một nền tảng (nền tảng - platform chứ không phải là framework đâu nhé) chạy trên engineGoogle Chrome V8của thằng google - hàng xịn đừng hỏi. Khi chúng ta sử dụng trình duyệtGoogle Chromethì Javascript cũng được biên dịch bằng engine này, nó sẽ nhận đoạn mã javascript của bạn và dịch sang mã máy, với tốc độ nhanh hơn. Nhận thấy trình biên dịch này rất nhanh và hiệu quả nên người ta quyết định đưa nó vào server-side, và thế là vào năm 2009, NodeJS đã ra đời. Từ đó đến nay, NodeJS đã vươn lên trở thành một trong những sự lựa chọn hàng đầu ở phía server-side, rất được ưa chuộng bởi cộng đồng các lập trình viên cũng như đã được sử dụng trong các hệ thống lớn như: Netflix, Paypal, Walmart, and Uber. Sau đây là bảng xếp hạng những thư viện/nền tảng được ưa chuộng nhất theo khảo sát của Stackoveflow vào tháng 2/2020


*

Vậy là mình đã giải thích xong dòng đầu tiên của định nghĩa rồi. Bây giờ chúng ta sẽ tiếp tục với dòng thứ hai nhé.

Event drivent? Non-blocking IO?

Mình nói qua IO một chút. IO chức là input/output, tức bất kì thao tác đọc/ghi nào tới hệ thống file. IO là thao tác tốn thời gian và nó sẽ block tất cả các hàm khác đang chạy. Đây chính là lúc mà cơ chế non-blocking IO trong NodeJS sẽ phát huy điểm mạnh của mình.

Xem thêm: Cách Chọn Và Nuôi Thuần Chào Mào Má Trắng Đơn Giản, Chào Mào Alưới

Mình sẽ lấy ví dụ cho dễ hiểu nhé: hãy tưởng tượng hệ thống của chúng ta đón nhận 2 request từ 2 người dùng là A và B. Cả 2 request này đều là đọc dữ liệu từ database rồi trả về cho người dùng, chẳng hạn như xem thông tin cá nhân chẳng hạn. Khi thằng A gửi request tới server, server thực hiện đọc database. Thường thì chúng ra sẽ tạo một luồng cho request A, và một luồng khác cho request B, nhưng vì NodeJS là đơn luồng (single-thread) nên nếu không sử dụng non-blocking IO thì thao tác đọc database sẽ chặn request B, thằng B sẽ phải đợi cho đến khi request A được thực hiện xong thì mới có thể được server tiếp nhận và xử lý. Nhưng với non-blocking IO thì 2 request này có thể được thực hiện đồng thời mà không cần phải chờ đợi nhau. Đặc tính non-blocking IO cũng khiến cho chúng ta không cần thiết phải sử dụng đến xử lý đa luồng mà vẫn có thể tiếp nhận và thực hiện được nhiều request cùng một lúc.


*

Cơ chế bất đồng bộ của NodeJS mang đến một lợi thế cực lớn về hiệu năng, nhất là khả năng xử lý được số lượng lớn các request cùng một lúc. Mình lấy ví dụ như ASP .NET, một framework sử dụng cơ chế blocking IO, để xử lý nhiều request một lúc thì chúng phải sinh ra nhiều luồng khác nhau, điều này sẽ khiến tài nguyên bộ nhớ và vi xử lý sẽ tốn kém hơn rất nhiều. Tất nhiên là các framework như ASP .NET cũng có thể xử lý bất đồng bộ, tuy nhiên chúng ta sẽ phải viết code để tạo ra các thao tác bất đồng bộ ấy. Còn đối với Node JS thì việc xử lý bất đồng bộ là mặc định

Cộng đồng NodeJS rất đông và hung hãn


*

NPM - Node packages manager là hệ thống thư viện giúp chúng ta có thể xây dựng ứng dụng một cách nhanh chóng và dễ dàng hơn. Mặc dù Node mới chỉ ra đời tới nay được hơn 10 năm, nhưng hệ thống thư viện hỗ trợ của chúng - npm nay đã có tới hơn 1,4 triệu packages, và con số này vẫn đang tăng lên chóng mặt (~804 packages/ngày ) theo số liệu củahttp://www.modulecounts.com/. Con số này thậm chí vượt trội so với những hệ thống thư viện của các framework lâu đời như nudget của ASP .NET, gems của Ruby on Rails,...

Một số package thông dụng nhất khi chúng ta tạo một server API với NodeJS có thể kể đến như express, mongoose (được coi như là relation mapping với MongoDB), Sequelize (Relation Mapping với các SQL database),... Chỉ với express cùng với 1 thư viện relation mapping thôi thì chúng ta hoàn toàn có thể build một RestfulAPI rất nhanh và dễ dàng rồi.

Tại sao lại là NodeJS ?

Vậy tại sao NodeJS lại phát triển mạnh mẽ và được ưa chuộng tới vậy ? Mình xin được kể tới một vài ưu điểm sau :

Trên đây là những chia sẻ dựa trên kiến thức của mình, hi vọng nó sẽ giúp ích cho các bạn mới tiếp cận hoặc tìm hiểu về NodeJS. Trong các bài tiếp theo, mình sẽ trình bày kỹ hơn những vấn đề liên quan tới NodeJS nhé.

Leave a Reply

Your email address will not be published. Required fields are marked *

  • Chịu nổi hay chịu nỗi

  • 7 lần nàng tiên cá xuất hiện ngoài đời thực được con người bắt gặp i vivu thế giới

  • Xe gtdd nghĩa la gì

  • Trò chơi dân gian việt nam

  • x