các thím nghĩ sao về concurrency trên máy chỉ có 1 core?
Concurrency trên 1 core có thể thấy ở thao tác liên quan đến memory. Cũng có nhiều lệnh được write vào memory nhưng một thời điểm chỉ write được một số ít lần. Vậy nên có một thứ là write buffer để lưu các phép write, sau đó CPU sẽ xử lý từ từ. Rất giống với cơ chế async await khi code app.
Mà concurrency thì thường quá, nói về parallelism nhé. Là parallel thực chứ không phải là giả tạo bằng cách context-switch:
Trong 1 core có thể có đến 3 cách parallelism:
1. Thread level: do hyper threading. Một core có thể thực thi cùng lúc nhiều thread,
2. Instruction level: do Out-of-order execution như mình đã nói trước đó. Nhờ 1 core có nhiều bộ phận để thực thi (EU) mà nhiều lệnh có thể thực thi cùng lúc,
3. Data level: hỗ trợ bởi các lệnh SIMD. Cho phép chỉ cần 1 lệnh nhưng có thể tính được nhiều phép tính. Cái này thì cần trình dịch và/hoặc lập trình viên can thiệp.