Skip to main content

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.

  • alt

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.

  • alt

Parallelism (Song song)

  • Mỗi người đảm nhận 1 task riêng biệt.

  • alt

Phân biệt Thread & Process

  • alt

  • Một process là 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 thread là 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 process thì các thread có thể chia sẻ tài nguyên (địa chỉ bộ nhớ) còn các process khác nhau thì 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 process1 thread, OS ném thread này vào core 1 CPU. Nếu process4 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ới Python thì 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ằng multi-threading trong Python không phải parallel mà là concurrent. Để sử dụng được multi-core, cần phải sử dụng multi-processing thay vì multi-threading. Module này tạo ra các process, mỗi process1 Interpreter và 1 bộ nhớ riêng, do đó mỗi process có 1 GIL riêng của nó.