Hỏi/ Thắc mắc Số lượng thread cho phép chạy đồng thời trên Windows

Đan Tôn

Gà con
Chào mọi người!
Giúp em giải đáp thắc mắc này với ạ.
Issue: (giả định)
Giả sử một PC với processor có 6 core 12 thread. Theo em hiểu thì có 12 kernel thread, sau đó em viết một application desktop multithread và app này được coding trên C#.NET, em xử lí perfomance trên app với 24 thread (user thread). Khi chạy ứng dụng thì hệ điều hành Windows sẽ xử lí 12 user thread và còn lại 12 user thread nữa sẽ đứng đợi, hay là run cùng lúc 24 thread theo cơ chế bất đồng bộ( Asynchronous) ạ?
Trên đây là vấn đề em tự giả định để giải đáp thắc về số lượng thread cùng hoạt động trên Windows OS ạ.
Giúp em với ạ, em cảm ơn!
 

Hinun97

Ở đâu khó có Hinun
Thành viên BQT
Mình nhớ không nhằm là chạy hết, nhưng mỗi cái 1 ít.
 

Hamano Kaito


Moderator
Bạn có 1 CPU siêu luồng | 12 luồng và 6 lõi.
Bạn viết 1 phần mềm với chức năng test số luồng hiện có nhưng bạn viết vượt định mức số luồng mà CPU hiện có
Sẽ xảy ra hiện tượng load cao ( CPU sẽ load 100% khi tải áp đó). Và số luồng mà CPU xử lý cũng chỉ có 12 luồng + 6 lõi. Việc bạn thêm vào 12 luồng nữa tức là thêm vào 12 dòng lệnh nữa, thì các luồng hiện có sẽ thay phiên nhau để xử lý hết số dòng lệnh mà bạn viết ứng dụng test đó.
Và theo mình hiểu thì sẽ ko có luồng nào nghỉ ngơi vì luồng đã được chạy do bạn tận dụng hết rồi. Chỉ là thay phiên nhau để xử lý hết số lệnh còn tồn đọng lại (12 luồng mà bạn đã thêm vào, kiểu là 12 dòng lệnh đó sẽ chờ để được xử lý).
Nếu CPU chạy theo kiểu bất đồng bộ thì sẽ gây hiện tượng nghẽn CPU làm đơ máy <== chỉ có A/C/E nào muốn cho CPU đi vào dĩ vãng mới dùng cách này (cpu strength)

P/s; Ko biết mình trả lời vậy có đúng ko nhỉ ? Mong A/C/E chém nhẹ tay !!!
 

Đan Tôn

Gà con
Bạn có 1 CPU siêu luồng | 12 luồng và 6 lõi.
Bạn viết 1 phần mềm với chức năng test số luồng hiện có nhưng bạn viết vượt định mức số luồng mà CPU hiện có
Sẽ xảy ra hiện tượng load cao ( CPU sẽ load 100% khi tải áp đó). Và số luồng mà CPU xử lý cũng chỉ có 12 luồng + 6 lõi. Việc bạn thêm vào 12 luồng nữa tức là thêm vào 12 dòng lệnh nữa, thì các luồng hiện có sẽ thay phiên nhau để xử lý hết số dòng lệnh mà bạn viết ứng dụng test đó.
Và theo mình hiểu thì sẽ ko có luồng nào nghỉ ngơi vì luồng đã được chạy do bạn tận dụng hết rồi. Chỉ là thay phiên nhau để xử lý hết số lệnh còn tồn đọng lại (12 luồng mà bạn đã thêm vào, kiểu là 12 dòng lệnh đó sẽ chờ để được xử lý).
Nếu CPU chạy theo kiểu bất đồng bộ thì sẽ gây hiện tượng nghẽn CPU làm đơ máy <== chỉ có A/C/E nào muốn cho CPU đi vào dĩ vãng mới dùng cách này (cpu strength)

P/s; Ko biết mình trả lời vậy có đúng ko nhỉ ? Mong A/C/E chém nhẹ tay !!!
nếu xử lí trên cơ chế đồng bộ như bác nói thì trên windows như em biết hiện hành có thể lên đến ngàn thread thì sẽ có hàng ngàn thread đợi 12 thread kia chạy xong, rồi cứ tiếp tục 12 thread nữa chạy xong, chắc mấy thread cuối queue đợi lâu lắm, chưa kể có thread bị system blocking nữa.
 

Hamano Kaito


Moderator
nếu xử lí trên cơ chế đồng bộ như bác nói thì trên windows như em biết hiện hành có thể lên đến ngàn thread thì sẽ có hàng ngàn thread đợi 12 thread kia chạy xong, rồi cứ tiếp tục 12 thread nữa chạy xong, chắc mấy thread cuối queue đợi lâu lắm, chưa kể có thread bị system blocking nữa.
Luồng của CPU được dùng để xứ lý các dòng lệnh. Và kèm theo bộ nhớ đệm nhỏ của CPU + cache từ RAM + cache HDD.
Nếu nói đợi thì sẽ không cảm giác được CPU đợi đâu bạn. Vì khi thực thi dòng lệnh CPU sẽ làm rất nhanh.
Bạn nên biết máy tính còn có cache từ RAM + ổ cứng nữa nha bạn. 2 cái này sẽ nơi gọi là lưu tạm thông tin và khi cần CPU sẽ gọi ra thực thi liền.
 

Đan Tôn

Gà con
Luồng của CPU được dùng để xứ lý các dòng lệnh. Và kèm theo bộ nhớ đệm nhỏ của CPU + cache từ RAM + cache HDD.
Nếu nói đợi thì sẽ không cảm giác được CPU đợi đâu bạn. Vì khi thực thi dòng lệnh CPU sẽ làm rất nhanh.
Bạn nên biết máy tính còn có cache từ RAM + ổ cứng nữa nha bạn. 2 cái này sẽ nơi gọi là lưu tạm thông tin và khi cần CPU sẽ gọi ra thực thi liền.
cảm ơn bác
 
Tin công nghệ
Liên Hệ và Hợp Tác

Top