Chương trình đa luồng thì thì xử lý nhiều stack cùng lúc?

Dạ anh chị cho em hỏi:

  • Ngôn ngữ đơn luồng thì tạo ra app chỉ có 1 bộ nhớ stack khi chạy (ví dụ javascript có 1 call stack), ngôn ngữ đa luồng lập trình ra app có nhiều stack khi chạy đúng không ạ? Có nghĩa là các task sẽ được xử lý đồng thời vì có nhiều stack (ví dụ java, C#, C++, …) đúng không ạ?
  • Đơn luồng thì có 1 bộ nhớ stack và 1 heap, còn đa luồng thì có nhiều stack nhưng vẫn có 1 heap hay nhiều heap?
  • Luồng của chương trình không liên quan đến luồng của CPU đúng không?

Em cảm ơn!

Thường mỗi os thread sẽ có 1 stack riêng. Mà từ “lập trình ra” thì không đúng do phần này lập trình viên không kiểm soát được.

Không.

Heap chỉ có 1 và dùng chung cho các thread. Trong link SO bạn đưa cũng có mà.

Tùy cách implement của ngôn ngữ, ví dụ thread của Java là map 1:1 với OS thread. Còn một số ngôn ngữ như Go thì có khái niệm green thread là thread do app tự quản lý riêng.

6 Likes

Đúng, luồng của ứng dụng không liên quan đến luồng của CPU. CPU không có khái niệm stack, stack là ở mức ngôn ngữ. Stack của mỗi layer luồng không phải lúc nào cũng đồng nhất nhau. Luồng ở mỗi layer không phải lúc nào cũng map 1:1 với layer trước
Thứ tự luồng: CPU core > hyper threading > OS > Language > Application.
Trong đó cái sau sẽ build on top cái phía trước.

8 Likes

Anh ơi nếu vậy CPU chỉ có 1 core vật lý vẫn xử lý đa luồng parallel được luôn phải không anh?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?