OS
Phân biệt Sequential, Concurrency & Parallelism
Sequential (Tuần tự)
-
1 người xử lí tuần tự từng task, xong task này mới xử lí task tiếp theo.
-
Concurrency (Đồng thời)
-
Một người luân phiên xử lý nhiều task, tại 1 thời điểm chỉ xử lí 1 task.
-
Parallelism (Song song)
-
Mỗi người đảm nhận 1 task riêng biệt.
-
Phân biệt Thread & Process
-

-
Một
processlà 1 instance thực thi của ứng dụng. Ví dụ khi bạn click vào Microsoft Excel, bạn đã khởi động 1 process để chạy Excel. -
Một
threadlà 1 đơn vị thực thi trong process. Hiểu đơn giản là 1 process có thể chứa nhiều thread, một thread có thể làm bất kì thứ gì mà một process có thể làm. -
Trong
cùng 1 processthì cácthreadcó thể chia sẻ tài nguyên (địa chỉ bộ nhớ) còn cácprocess khác nhauthì không. Do đó các threads có thể đọc và ghi các cấu trúc dữ liệu, các biến giống nhau và cũng giao tiếp với nhau dễ dàng. -
Khi khởi động process, nó yêu cầu OS cấp cho 1 bộ nhớ RAM nhất định. Sau đó nếu process có 1 thread, OS ném thread này vào core 1 CPU. Nếu process có 4 threads thì OS sẽ dùng 4 core CPU cho các threads này. Tuy nhiên, lưu ý rằng 1 core CPU không thể chạy parallel mà chạy concurrent. Vì vậy nếu OS chỉ có 2 core CPU và có tận 4 threads đang được yêu cầu xử lí, OS sẽ kết hợp cả parallel & concurrent vì tại 1 thời điểm chỉ có 2 threads được xử lí cùng lúc bởi CPU.
-
Tuy nhiên lí thuyết trên chỉ đúng với
C++, Java, Rust, Go,..., còn vớiPythonthì không. Python có cơ chếGIL (Global Interpreter Lock), có nghĩa là tại 1 thời điểm chỉ 1 thread được điều khiển Interpreter. Như vậy có thể thấy rằngmulti-threadingtrong Python không phải parallel mà là concurrent. Để sử dụng đượcmulti-core, cần phải sử dụngmulti-processingthay vìmulti-threading. Module này tạo ra các process, mỗi process có 1 Interpreter và 1 bộ nhớ riêng, do đó mỗi process có 1 GIL riêng của nó.