Core CUP, Process, Thread?
Trong bài viết này mình sẽ đi phân tích và tìm hiểu về 3 "khái niệm" rất gần với đội ngũ làm IT tuy nhiên để hiểu về nó thì không hẳn tất cả mọi người đều hiểu
Trong lập trình chúng ta sẽ gặp các bài toán cần phải tối ưu hệ thống để nâng cao hiệu năng và tốc độ xử lý. Trong vô vàn việc có thể làm để nâng cao hiệu năng thì có một phương án đó là lập trình đa luồng (multiple threads) mà thread thì lại trong process, các process sẽ chạy trên máy tính hoặc các phần cứng khác tương ứng. Các phần cứng hoặc máy tính thì sẽ có CPU để xử lý và CPU thì sẽ chia ra thành các core như dual-core (2 lõi), quad-core (4 lõi), hexa-core (6 lõi), octa-core (8 lõi) hoặc hơn. (Bài viết tập trung mô tả về dòng CPU của Intel)
Như vậy là 3 thành phần này có liên quan rất gần đến nhau trong việc thực thi một ứng dụng.
Cụ thể như nào hãy cùng tìm hiểu nào!
Core của CPU là gì?
Core là thành phần quan trọng nhất của CPU (Central Processing Unit - Bộ xử lý trung tâm). Đây là nơi thực hiện các phép tính toán và xử lý dữ liệu để chạy các chương trình trên máy tính.
Core CPU hoạt động như thế nào?
Hoạt động của core được chia thành 4 bước: Tìm nạp lệnh (Fetch), Giải mã lệnh (Decode), Thực thi lệnh (Execute) và Ghi kết quả (Writeback).
B1 - Tìm nạp lệnh: CPU lấy lệnh từ bộ nhớ (RAM hoặc bộ nhớ cache) để chuẩn bị xử lý.
B2 - Giải mã lệnh: CPU phân tích và xác định lệnh cần làm gì.
B3 - Thực thi lệnh: CPU sẽ thực hiện các phép tính toán logic theo lệnh đã được giải mã ở bước 2
B4 - Ghi kết quả: Lưu kết quả vào thanh ghi hoặc bộ nhớ để để trả lại cho ứng dụng
Đặc điểm công nghệ của các dòng Core
Hyper-Threading (HT) là gì?
Công nghệ giả lập đa luồng giúp một nhân xử lý (core) có thể thực thi hai threads cùng lúc.
Mục đích: Tận dụng tối đa tài nguyên CPU, giảm thời gian chờ của các luồng xử lý.
Như hình ảnh bên dưới, máy tính có 4 CPU vật lý có hỗ trợ Hyper Threading nên một CPU sẽ có 2 thread vậy nên tổng số thread được xử lý đồng thời là 8. Việc này rất quan trọng trong lập trình để tối ưu và sử dụng thread sao cho phù hợp với máy chủ.
Turbo Boost là gì?
Công nghệ ép xung tự động giúp CPU tăng xung nhịp khi cần thiết.
Khi chạy tác vụ nặng (chơi game, render video), CPU tự động đẩy xung nhịp lên cao hơn để xử lý nhanh hơn.
Turbo Boost kích hoạt khi CPU có nhiệt độ & điện năng phù hợp.
Ví dụ: Nếu CPU Core i7-12700K có xung cơ bản 3.6GHz, Turbo Boost có thể đẩy lên 5.0GHz khi cần.
Bộ nhớ Cache là gì?
Cache là bộ nhớ tốc độ cao được tích hợp trong CPU.
Cache giúp lưu trữ dữ liệu tạm thời để CPU truy xuất nhanh hơn so với lấy từ RAM.
Các loại Cache trong CPU:
L1 Cache (32KB - 64KB/core) – Tốc độ cao nhất nhưng dung lượng nhỏ.
L2 Cache (256KB - 2MB/core) – Dung lượng lớn hơn, tốc độ chậm hơn L1.
L3 Cache (2MB - 64MB) – Dùng chung cho toàn bộ CPU, giúp tối ưu hiệu suất đa nhân.
Như vậy ở trên chúng ta đã có được các thông tin cơ bản của CPU, và điều quan tâm nhất trong bài viết này là số lượng thread trên mỗi CPU. Bây giờ hãy cùng tìm hiểu các phần tiếp theo để biết tại sao thông số này lại quan trọng.
Process (Tiến trình) là gì?
Các lập trình viên như chúng ta sau những ngày tháng miệt mài làm việc sẽ cho ra một ứng dụng hoặc nhiều ứng dụng ví dụ như: một website, web api, ứng desktop, một ứng dụng chạy gầm (background). Tất cả các ứng dụng trên khi chạy trên máy tính sẽ gọi là process.
Tương tự vậy thì chúng ta có các process khác như ứng Microsoft Word, Microsoft Excel, Google Chrome. Như vậy process là một tiến trình chạy trên hệ điều hành.
Mỗi process có vùng nhớ riêng (Private Memory Space) và không thể truy cập trực tiếp bộ nhớ của tiến trình khác.
Một process có thể có nhiều luồng (threads) để thực thi các tác vụ đồng thời.
Một process sẽ có các trạng thái như: Mới (New), Sẵn sàng (Ready), Đang chạy (Running), Đang chờ (Waiting), Đã hủy (Terminated) and Tạm dừng (Suspended).
Việc khởi tạo và kết thúc một process sẽ cần một khoảng thời gian để xử lý. Hãy tưởng tượng giống như việc chúng ta bật/tắt Microsoft Word, từ khi click vào biểu tượng để mở chúng ta sẽ cần một chút thời gian để ứng dụng khởi động xong. Khoảng thời gian này sẽ phụ thuộc vào từng ứng dụng khác nhau.
Thread (Luồng)
Thread (luồng) là đơn vị nhỏ nhất của một tiến trình có thể được thực thi.
Mỗi process có ít nhất một thread chính (main thread), nhưng có thể tạo ra nhiều thread con (child threads) để thực hiện các tác vụ đồng thời.
Các threads trong cùng một process chia sẻ bộ nhớ và tài nguyên với nhau, giúp chúng trao đổi dữ liệu nhanh hơn so với các tiến trình khác nhau. Cũng do đặc điểm này nên khi lập trình đa luồng chúng ta có thể gặp tình huống tranh chấp tái nguyên hoặc thread này chỉnh sửa dữ liệu của thread khác việc này sẽ gây ra các lỗi không mong muốn
Một thread sẽ có những trạng thái sau: Đang chạy (Running), Sẵn sàng (Ready) và Chặn (Blocked)
Ví dụ:
Trong Google Chrome:
Một thread có thể xử lý giao diện người dùng (UI).
Một thread khác có thể tải trang web.
Một thread khác có thể phát video YouTube.
Tất cả các thread này chia sẻ cùng một vùng nhớ của tiến trình Chrome.
Mối quan hệ giữa Core, Process và Thread
Core thực thi các threads.
Process là một chương trình đang chạy, có thể có nhiều threads.
Một core có thể chạy nhiều threads cùng lúc, nhưng số lượng threads thực thi đồng thời bị giới hạn bởi số core của CPU.
Ví dụ máy tính có 4 core và mỗi core có thể thực thi 2 thread cùng lúc. Như vậy tổng số thread có thể thực thi cùng lúc là 8. Nếu chúng ta mở quá nhiều ứng dụng chạy cùng lúc, sẽ dẫn đến việc có nhiều thread chạy đồng thời. Trong trường hợp này CPU sẽ phải thực hiện switch context thường xuyên để xử lý các tính toán mà các thread yêu cầu, việc này sẽ làm cho CPU phải hoạt động liên tục và nếu quá nhiều thread sẽ dẫn đến việc các thread phải chờ xử lý sẽ lâu hơn. Điều này cũng gây ra các hiện tượng giật lag chương trình hoạt động không được mượt mà.



