2010-10-21 45 views
6

Hãy chụp ảnh có 2 trang trên trang web: nhanh và chậm. Yêu cầu làm chậm trang được thực hiện trong 1 phút, yêu cầu nhanh 5 giây.ASP.NET: Yêu cầu song song được xử lý như thế nào

Toàn bộ sự nghiệp phát triển của tôi Tôi nghĩ rằng nếu 1 yêu cầu bắt đầu chậm: anh ấy sẽ thực hiện cuộc gọi (đồng bộ) tới DB ... chờ câu trả lời ... Nếu trong thời gian này yêu cầu trang nhanh sẽ được thực hiện, yêu cầu này sẽ được xử lý trong khi hệ thống đang chờ phản hồi từ DB.

Nhưng hôm nay tôi đã tìm thấy: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

Một thể hiện của lớp HttpApplication được sử dụng để xử lý nhiều yêu cầu trong suốt cuộc đời của nó. Tuy nhiên, nó chỉ có thể xử lý một yêu cầu tại một thời điểm. Do đó, các biến thành viên có thể được sử dụng để lưu trữ dữ liệu theo yêu cầu.

Điều đó có nghĩa là suy nghĩ ban đầu của tôi sai?

Bạn có thể làm rõ ý nghĩa của chúng? Tôi chắc chắn rằng điều đó là như tôi mong đợi ...

Trả lời

4

Suy nghĩ ban đầu của bạn là đúng, và đó là tài liệu. Quá trình nhân viên IIS có thể sinh ra nhiều luồng, mỗi luồng với cá thể riêng của chúng là lớp HttpApplication.

+0

Dường như nó cũng có thể coi thường http://stackoverflow.com/questions/2675910/how-to-know-who-kills-my-threads – Justin

+0

Bạn có muốn nói rằng có thể có trường hợp SEVERAL HttpApplication trong bất kỳ thời điểm nào. Nó không có nhiều ý nghĩa đối với tôi ... Tôi có hiểu chính xác rằng chỉ thread 1 được tạo nên tạo ra sự kiện "Application_Start"? – Budda

+0

BTW, Cảm ơn sự giúp đỡ của bạn. :) – Budda

4

ASP .NET sẽ lưu trữ nhiều AppDomain cho ứng dụng web của bạn trong một quy trình công nhân đơn lẻ (w3wp.exe). Nó thậm chí có thể chia sẻ AppDomains cho các ứng dụng web khác nhau theo cùng một quy trình công nhân (nếu chúng được gán cho cùng một nhóm ứng dụng).

Mỗi AppDomain mà ASP .NET tạo ra có thể lưu trữ nhiều cá thể HttpApplication phục vụ các yêu cầu và đi qua vòng đời ASP .NET. Mỗi HttpApplication có thể (như bạn đã nói) trả lời một yêu cầu tại một thời điểm.

+1

Đoán, bạn muốn nói "ASP .NET sẽ lưu trữ nhiều AppDomain cho ứng dụng web của bạn". Theo quan điểm của tôi, nó không có ý nghĩa để có vài miền ứng dụng cho một ứng dụng web. Tôi có đúng không? – Budda

+0

BTW, Cảm ơn sự giúp đỡ của bạn. :) – Budda

+1

Từ một quan điểm ứng dụng web nhiều, nó làm cho tấn ý thức. Bạn chắc chắn không muốn hai ứng dụng web khác nhau chạy trong cùng một AppDomain và chia sẻ tài nguyên từ một quan điểm bảo mật. Nói chung, như tôi đã hiểu, mục đích chạy các AppDomain riêng biệt trong một quy trình công nhân đơn lẻ là để ổn định, do đó, một lỗi AppDomain đơn lẻ không làm giảm toàn bộ ứng dụng web. – Jeff

4

Yêu cầu phải được xử lý theo thứ tự tuần tự ở phía máy chủ nếu cả hai yêu cầu sử dụng cùng một trạng thái phiên với quyền truy cập đọc/ghi, vì khóa phiên asp.net.

Bạn có thể tìm thêm thông tin ở đây: http://msdn.microsoft.com/en-us/library/ie/ms178581.aspx

Các yêu cầu đồng thời và Session State

Tiếp cận trạng thái phiên ASP.NET là độc quyền cho mỗi phiên, có nghĩa là nếu hai người dùng khác nhau có những yêu cầu đồng thời , quyền truy cập vào từng phiên riêng biệt được cấp đồng thời. Tuy nhiên, nếu hai yêu cầu đồng thời được thực hiện cho cùng một phiên (bằng cách sử dụng cùng một giá trị SessionID), yêu cầu đầu tiên sẽ được truy cập độc quyền vào thông tin phiên. Yêu cầu thứ hai chỉ thực hiện sau khi yêu cầu đầu tiên kết thúc. (Phiên thứ hai cũng có thể truy cập nếu khóa độc quyền trên thông tin được giải phóng vì yêu cầu đầu tiên vượt quá thời gian chờ khóa.) Nếu giá trị EnableSessionState trong chỉ thị @ Page được đặt thành ReadOnly, yêu cầu chỉ đọc thông tin phiên không dẫn đến khóa độc quyền trên dữ liệu phiên. Tuy nhiên, các yêu cầu chỉ đọc cho dữ liệu phiên có thể vẫn phải chờ một khóa được thiết lập bởi một yêu cầu đọc ghi dữ liệu phiên để xóa.

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