Linh tinh
Mục lục

Khái niệm trong lập trình / thiết kế hệ thống

Nhiều năm qua trong quá trình làm nghề lập trình, có những từ khoá mà cho dù có tìm kiếm, đọc rồi suy nghĩ bao nhiêu lần, mình vẫn thấy không thực sự hiểu rõ nó ở lần gặp lại tiếp theo. Vậy nên lần này mình tạo một bài viết để gom những cái này lại, tiện có chỗ để tra cứu.

Synchronous / Asynchronous / Blocking / Non blocking

Một trong những từ khoá gây mơ hồ nhất đối với mình, sau khi tra cứu nhiều nguồn, mình đồng ý với cách hiểu hai cặp từ khoá này theo những mục đích sử dụng khác nhau.

Synchronous / Asynchronous

Khi gọi bạn để thực hiện một công việc:

Với mình thì đây là một vấn đề thuộc về việc thiết kế kiến trúc hệ thống.

synchronous-asynchronous-communication

(Ảnh được lấy từ khoá học System Design for Interviews and Beyond của bác Mikhail Smarshchok)

Synchronous

Asynchronous

Blocking / Non blocking

Khi một thread/process cần thực hiện tác vụ I/O, trong lúc đợi kết quả, nó có một vài sự lựa chọn:

Sự kết hợp

Cơ bản thì chúng ta có thể kết hợp các khái niệm trên để cho ra các mô hình sau: