2010-03-24 32 views
12

Sự khác biệt giữa ái lực luồng và ái lực quy trình là gì?Sự khác nhau giữa ái lực luồng và ái lực quy trình là gì?

Nếu tôi có hai luồng và tôi có một máy lõi kép thì có thể chạy hai luồng này song song trên hai lõi không?

Nếu tôi sử dụng mặt nạ sở thích bộ xử lý thì tôi có thể kiểm soát việc thực hiện quy trình trên lõi nhưng khi tôi phải chạy chuỗi trên một lõi cụ thể, làm cách nào để làm cho các luồng này cụ thể?

Một ví dụ rất đơn giản sẽ được đánh giá cao.

Trả lời

0

Tôi không biết rằng bạn có thể đặt mối quan hệ chuỗi trong .net, vì vậy, môi trường sẽ quyết định chuỗi nào sẽ chạy trên lõi nào.

+0

Nhưng Cách chạy luồng trên (các) lõi điển hình? – DotNetBeginner

+0

@Brian Rasmussen - và cái gì? Tôi đứng đằng sau lời nói của tôi, rằng không có cách nào từ .NET để buộc thread cụ thể để thực hiện trên bộ vi xử lý cụ thể. Xem chủ đề này để biết chi tiết: http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/3279302a-6786-44a7-b69d-c302699b6fcb – Axarydax

+0

Xin lỗi, tôi đã hiểu nhầm bạn rồi. –

4

Sự khác nhau giữa mối quan hệ chủ đề và mối quan hệ quy trình là gì?

Khuynh hướng quá trình là mặt nạ sở thích mặc định cho tất cả các chuỗi của quá trình đó. Chủ đề mới sẽ bắt đầu bằng mặt nạ ái lực quy trình nếu không được chỉ định khác. Tuy nhiên, ái lực của một sợi đơn có thể được thay đổi mà không thay đổi ái lực quy trình (và mặt nạ ái lực của các chủ đề khác), và đó là khi có sự khác biệt giữa quá trình và chuỗi chủ đề.

Nếu tôi có hai Chủ đề và tôi có máy lõi đôi thì có thể chạy hai luồng này song song trên hai lõi không?

Có thể, nhưng trong hầu hết các trường hợp, bạn thực sự nên để hệ điều hành quyết định ... rất có thể thông minh hơn bạn.

Nếu tôi sử dụng ái lực bộ xử lý Mặt nạ thì tôi có thể kiểm soát việc thực hiện quy trình trên lõi nhưng làm cách nào để làm cho các luồng này cụ thể?

Bạn sẽ phải sử dụng p/gọi để gọi hàm không được quản lý SetThreadAffinityMask() và sau đó sử dụng Thread.BeginThreadAffinity() để đảm bảo rằng các chủ đề quản lý ở lại với một sợi OS cụ thể. Nhưng bạn thực sự không muốn làm điều đó!

+0

Tôi đã thử sử dụng SetThreadAffinityMask(), plese có xem xét câu hỏi của tôi @ http://stackoverflow.com/questions/2498501/using-setthreadaffinitymask-function-imported-from-kernel32-dll-in-c-code – DotNetBeginner

Các vấn đề liên quan