Skip to content

Instantly share code, notes, and snippets.

@nmvuong92
Last active September 4, 2018 09:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nmvuong92/eb70875508b4a8af9b5cd040f517e1ff to your computer and use it in GitHub Desktop.
Save nmvuong92/eb70875508b4a8af9b5cd040f517e1ff to your computer and use it in GitHub Desktop.
Blocking & Nonblocking I/O

I/O?

  • Là quá trình giao tiếp
  • Đưa dữ liệu vào trả dữ liệu ra

BLOCKING vs NonBlocking

Blocking I/O

  • Yêu cầu thực thi một IO operation, sau khi hoàn thành thì trả kết quả lại. Process/Theard gọi bị block cho đến khi có kết quả trả về hoặc xảy ra ngoại lệ.

Nonblocking I/O

  • Yêu cầu thực thi IO operation và trả về ngay lập tức (timeout = 0). Nếu operation chưa sẵn sàng để thực hiện thì thử lại sau. Tương đương với kiểm tra IO operation có sẵn sàng ngay hay không, nếu có thì thực hiện và trả về, nếu không thì thông báo thử lại sau.

Synchronous vs Asynchronous

Synchronous

  • Diễn ra theo thứ tự. Một hành động chỉ được bắt đầu khi hành động trước kết thúc.

Asynchronous

  • Không theo thứ tự, các hành động có thể xảy ra đồng thời hoặc chí ít, mặc dù các hành động bắt đầu theo thứ tự nhưng kết thúc thì không. Một hành động có thể bắt đầu (và thậm chí kết thúc) trước khi hành động trước đó hoàn thành.

  • Sau khi gọi hành động A, ta không trông chờ kết quả ngay mà chuyển sang bắt đầu hành động B. Hành động A sẽ hoàn thành vào một thời điểm trong tương lai, khi ấy, ta có thể quay lại xem xét kết quả của A hoặc không. Trong trường hợp quan tâm đến kết quả của A, ta cần một sự kiện Asynchronous Notification thông báo rằng A đã hoàn thành.

  • Vì thời điểm xảy ra sự kiện hành động A hoàn thành là không thể xác định, việc bỏ dở công việc đang thực hiện để chuyển sang xem xét và xử lý kết quả của A gây ra sự thay đổi luồng xử lý của chương trình một cách không thể dự đoán. Luồng của chương trình khi ấy không tuần tự nữa mà phụ thuộc vào các sự kiện xảy ra. Mô hình như vậy gọi là Event-Driven.

Nguồn: https://sotatek.com/blog/nodejs-hieu-asynchronous-event-drivent-nonblocking-io/ 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment