2009-12-30 25 views
5

Tôi hiểu rằng các chuỗi được quản lý không được đảm bảo chạy trên cùng một chuỗi hệ điều hành.Tần suất chuỗi chủ đề chuyển đổi được quản lý là bao lâu?

Nếu CLR có thể chuyển đổi chuỗi được quản lý giữa các chuỗi hệ điều hành, tần suất xảy ra điều này? Điều gì ảnh hưởng đến tần số?

Tôi có một số separate question về cách ngừng chuyển đổi xảy ra. Giải nhì cho tôi sẽ là vì điều này không xảy ra quá thường xuyên (ít hơn một phút một lần sẽ ổn).

Trả lời

7

Nó hoàn toàn phụ thuộc vào máy chủ. Không có sự đảm bảo nào về thời gian hoặc nơi chuyển đổi luồng có thể diễn ra (nếu có), được cung cấp cho bất kỳ máy chủ lưu trữ cụ thể nào.

Tuy nhiên, vì .NET 2.0, bạn đã có thể gọi phương thức BeginThreadAffinity tĩnh để thông báo cho chủ nhà rằng mã đang chạy phụ thuộc vào bản sắc của sợi OS cơ bản:

http://msdn.microsoft.com/en-us/library/system.threading.thread.beginthreadaffinity(VS.80).aspx

Tất nhiên, hãy chắc chắn rằng bạn gọi phương thức EndThreadAffinity khi thread của bạn được thực hiện (tôi không chắc điều gì sẽ xảy ra nếu bạn chỉ để cho thread kết thúc mà không gọi EndThreadAffinity. Tôi không thể tưởng tượng nó sẽ có tác động, nhưng tốt hơn là rõ ràng trong vấn đề này, IMO):

http://msdn.microsoft.com/en-us/library/system.threading.thread.endthreadaffinity(VS.80).aspx

4

Theo như tôi biết việc triển khai hiện tại các luồng bản đồ được quản lý CLR đến chuỗi hệ điều hành. Tuy nhiên, vì tài liệu nói rằng điều này không được đảm bảo, tức là nó là một chi tiết thực hiện nên bạn không thể giả định bất cứ điều gì. Nó có thể thay đổi, nhưng ngay cả khi nó không phải là lời khuyên của tài liệu là bạn không nên dựa vào một ánh xạ một.

Vì casperOne chỉ ra bạn có thể đặt mối quan hệ chuỗi nhưng ngoài ra, không có đảm bảo.

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