Tôi đang đọc một bài viết về HttpContext và CallContext và xem thread-agility. Có nghĩa là gì?Ý nghĩa của thread-agility trong ASP.Net là gì?
Trả lời
Điều đó có nghĩa là IIS được tự do sử dụng nhiều hơn một luồng để xử lý một yêu cầu duy nhất, mặc dù không song song.
Về cơ bản, IIS cố gắng thực hiện các hoạt động I/O không đồng bộ, do đó giải phóng chuỗi cuộc gọi trong suốt thời gian hoạt động. Chủ đề đó được trả về hồ bơi và có thể được sử dụng để xử lý các yêu cầu khác trong thời gian chờ đợi.
Khi hoạt động I/O không đồng bộ hoàn thành, kiểm soát có thể được trả lại cho luồng khác với chuỗi ban đầu xử lý yêu cầu (vì chuỗi đó có thể bận ở nơi khác), vì vậy yêu cầu có thể tiếp tục được xử lý càng sớm càng tốt .
Và vấn đề nhỏ duy nhất với điều này là nó có thể phá vỡ mã ngẫu nhiên. Ví dụ, khối truy cập dữ liệu EntLib từ nhóm "Patterns and Practices" của Microsoft đôi khi trộn lẫn yêu cầu-phản hồi để bạn nhận được phản hồi cho một truy vấn khác với truy vấn bạn đã bắt đầu, nếu chuỗi đã xảy ra thay đổi. Đây là ít nhất là cố định (trong EntLib v5.0), nhưng thực sự là lỗi trong ASP.NET, được cho là hỗ trợ bất kỳ mã được quản lý nào. Bạn không cần phải biết liệu việc triển khai thư viện bên thứ ba của bạn có sử dụng tính năng này hay của FW/CLR hay không. –
Tôi đã tìm hiểu về sự nhanh nhẹn của luồng một cách khó khăn. Sử dụng log4net, gán thuộc tính yêu cầu cho một ThreadContext tôi đã kết thúc với các thông điệp tường trình được đăng nhập với URL yêu cầu, tên người dùng và địa chỉ IP sai. Xem [vấn đề bối cảnh log4net với sự nhanh nhẹn chủ đề ASP.Net] (http://piers7.blogspot.nl/2005/12/log4net-context-problems-with-aspnet.html). –
Đúng, không thể sử dụng ThreadContext hoặc CurrentPrincipal để lưu trữ dữ liệu. Thay vào đó, bạn phải sử dụng HttpContext.Item và HttpContext.User tương ứng. –
bản sao có thể có của [Làm thế nào là đa luồng ASP.NET?] (Http://stackoverflow.com/questions/657735/how-is-asp-net-multithreaded) –
Chủ đề-Agility về cơ bản có nghĩa là chuỗi yêu cầu đang được xử lý có thể được thay đổi trong quá trình thực hiện yêu cầu. – Nico
Theo liên kết này http://blog.idm.fr/2010/03/aspnet-thread-agility-or-why-threadstatic-should-not-be-used.html Trong ASP.Net, vùng chứa có thể tốt quyết định chuyển chủ đề ở giữa quá trình xử lý yêu cầu. Đây được gọi là sự nhanh nhẹn của luồng. – HatSoft