Khi được hỏi câu hỏi này trong lúc phỏng vấn, bạn sẽ trả lời ra sao? Một câu hỏi khá là dễ đoán, nhưng khi nghĩ đến câu trả lời, chúng ta lại thấy gờn gợn phải không nào 😀 Gợn vì câu hỏi chung chung quá, gợn vì nó có quá nhiều nguyên nhân mà chúng ta không biết phải liệt kê từ đâu hay túm cái váy lại như thế nào để trả lời cho đầy đủ nhất. Vậy thì trong bài chia sẻ này, mọi người hãy cùng Huy tìm hiểu xem việc hệ thống chúng ta bị chậm nó đến từ đâu nhé. 
Vì sao hệ thống của bạn bị chậm?
Vì sao hệ thống của bạn bị chậm?
Trước tiên, Huy muốn giới thiệu với bà con 2 keyword đó là “CPU Bound” và “IO Bound”. Đây chính là 2 tác vụ chính trong công việc lập trình mà mọi người sẽ làm việc. Cụ thể:
1. CPU Bound: là thuật ngữ để mô tả các tác vụ, công việc hoặc quy trình mà thời gian hoàn thành phụ thuộc chủ yếu vào tốc độ của bộ xử lý trung tâm (CPU). Nói cách khác, hiệu suất của các tác vụ này bị giới hạn bởi khả năng xử lý của CPU.
Ví dụ nhé: - Giải các bài toán khoa học phức tạp, mô phỏng các hiện tượng vật lý, hóa học, v.v. - Mã hóa/giải mã video độ phân giải cao, áp dụng hiệu ứng và chỉnh sửa các chi tiết phức tạp. - Tạo ra các mô hình 3D chi tiết, thực tế cho các ứng dụng trong phim ảnh, kiến trúc, thiết kế game, v.v. - Giải các phương trình toán học phức tạp, phân tích dữ liệu khoa học, v.v.
2. IO Bound: là thuật ngữ để mô tả các tác vụ, công việc hoặc quy trình mà thời gian hoàn thành phụ thuộc chủ yếu vào tốc độ của các hoạt động đầu vào/ra (I/O). Nói cách khác, hiệu suất của các tác vụ này bị giới hạn bởi tốc độ truyền dữ liệu qua các thiết bị I/O như ổ cứng, mạng hoặc các thiết bị ngoại vi khác.
Ví dụ nhé: - Di chuyển một lượng lớn dữ liệu giữa các ổ lưu trữ. - Truy cập dữ liệu từ internet hoặc lưu trữ đám mây. - Mở và lưu các tệp tin có dung lượng lớn hoặc định dạng phức tạp.- Truy xuất dữ liệu từ cơ sở dữ liệu có dung lượng lớn.
Khi đã hiểu sơ bộ ý nghĩa của 2 từ khoá này bạn có thể thấy rằng, hầu như tất cả các việc làm về lập trình máy tính của chúng ta đều liên quan đến CPU bound hoặc IP bound phải không nào? 
Vậy thì quay lại với câu hỏi phỏng vấn trên, chúng ta hoàn toàn có thể trả lời rằng: Hầu hết các nguyên nhân dẫn đến việc hệ thống bị chậm đều do quá tải CPU hoặc là IO. Vậy nên các giải pháp để xử lý sẽ xoay quanh 2 vấn đề này. Cụ thể:
1. Khi xác định được vấn đề do CPU Bound, chúng ta có thể: - Nâng cấp CPU: Sử dụng CPU mạnh mẽ hơn với nhiều nhân và xung nhịp cao hơn để tăng tốc độ xử lý. - Overclock CPU: Tăng tốc độ xung nhịp của CPU để cải thiện hiệu suất (tuy nhiên, cần lưu ý đến nguy cơ quá nhiệt và giảm tuổi thọ). - Tối ưu hóa thuật toán: Phân tích và tối ưu hóa thuật toán được sử dụng trong các tác vụ để giảm thiểu thời gian xử lý. - Sử dụng công nghệ đa luồng: Chia nhỏ các tác vụ thành nhiều luồng nhỏ hơn để có thể xử lý song song trên nhiều nhân CPU.
2. Còn khi xác định được vấn đề là do IO Bound, chúng ta có thể:  - Nâng cấp thiết bị I/O: Sử dụng ổ cứng SSD tốc độ cao, mạng tốc độ cao hoặc các thiết bị ngoại vi hiệu suất cao để tăng tốc độ truyền dữ liệu. - Giảm thiểu I/O: Tối ưu hóa ứng dụng để giảm thiểu số lượng truy cập I/O cần thiết, chẳng hạn như nén dữ liệu hoặc sử dụng bộ nhớ cache. - Sử dụng nhiều thiết bị I/O: Phân tán các hoạt động I/O trên nhiều thiết bị I/O song song để tăng tốc độ truyền dữ liệu tổng thể. - Cân bằng tải I/O: Sử dụng các thuật toán cân bằng tải để phân phối đều các truy cập I/O giữa nhiều máy chủ hoặc thiết bị lưu trữ.
Túm lại, hiểu biết về các khái niệm CPU-bound và I/O-bound giúp chúng ta sử dụng và lập trình máy tính hiệu quả hơn. Đối với tác vụ I/O-bound, việc nâng cấp thiết bị I/O hoặc tối ưu hóa truy cập I/O có thể mang lại hiệu quả cao. Ngược lại, với tác vụ CPU-bound, việc nâng cấp CPU hoặc tối ưu hóa thuật toán có thể cải thiện hiệu suất đáng kể.
Hi vọng những từ khoá này sẽ có ích cho bạn không chỉ là trong khi đi phỏng vấn mà cũng trong chính công việc bạn đang làm hằng ngày. 
Nếu thấy có giá trị, bạn hãy like, share và comment để tạo động lực cho mình chia sẻ nhiều hơn nhé. Cảm ơn mọi người, mình là Huy Đê Tê!