2011-02-05 18 views
9

Tôi đã thêm log4net vào ứng dụng của mình và giờ đây có thể xem các Id chuỗi hoạt động của người dùng khi họ điều hướng qua trang web của tôi. Có bất kỳ thuật toán cụ thể để làm thế nào phân công chủ đề xảy ra với IIS7, hoặc là nó chỉ là một số phân công ngẫu nhiên (tôi nghi ngờ nó không hoàn toàn ngẫu nhiên vì trang web lưu lượng truy cập thấp của tôi cho thấy chủ yếu trong khoảng 10-30)? Có tối đa số chủ đề có sẵn không? Và tôi nhận thấy rằng lịch trình của tôi hiển thị với một id chủ đề lạ - bất kỳ lý do nào cho điều này? Trình lên lịch là Quartz.net và id hiển thị là "Scheduler_Worker-10" và không chỉ là số.Các luồng IIS7 được gán như thế nào?

+0

Tôi cho rằng ít nhất 1 luồng được phân bổ cho mỗi kết nối, sau đó có thể là một vài luồng chủ cho ứng dụng (để chấp nhận kết nối, quản lý trạng thái ứng dụng chung, v.v.). Tôi không đăng bài này như một câu trả lời, bởi vì nó chỉ là một phỏng đoán. – IDWMaster

+2

Xem http://stackoverflow.com/questions/4839657/how-are-threads-tied-to-requests-through-http-sys-iis-and-asp-net –

Trả lời

8

This giải thích tất cả những gì bạn cần biết.

Một Trích:

Khi ASP.NET được lưu trữ trên IIS 7.0 trong chế độ tích hợp, việc sử dụng các chủ đề là một chút khác nhau. Trước hết, hàng đợi cấp ứng dụng không còn nữa. Hiệu suất của họ luôn thực sự là xấu, không có hy vọng trong việc sửa lỗi này, và vì vậy chúng tôi đã loại bỏ chúng. Nhưng có lẽ sự khác biệt lớn nhất là ở chế độ IIS 6.0 hoặc ISAPI, ASP.NET hạn chế số lượng chủ đề đồng thời yêu cầu thực thi, nhưng trong chế độ tích hợp IIS 7.0 , ASP.NET hạn chế số đồng thời thực hiện yêu cầu . Sự khác biệt chỉ quan trọng khi yêu cầu không đồng bộ (yêu cầu có trình xử lý không đồng bộ hoặc mô-đun trong số đường ống hoàn thành không đồng bộ). Rõ ràng nếu reqeusts là đồng bộ, sau đó số của đồng thời thực hiện yêu cầu cũng giống như số lượng đề đồng thời thực hiện yêu cầu, nhưng nếu yêu cầu được không đồng bộ sau đó hai số những có thể khá khác nhau như bạn có thể có nhiều đề xuất hơn so với chuỗi.

Về cơ bản, nếu yêu cầu đồng bộ, cùng số lượng chủ đề cho mỗi yêu cầu. Xem ở đây với số khác nhau parameters.

4

Tôi đã giải thích này là một bài đăng blog trên blog của tôi ASP.NET Performance-Instantiating Business Layers

Tiêu đề không trùng khớp với câu hỏi của bạn nhưng tôi giải thích cách IIS xử lý yêu cầu và tôi tin rằng bạn sẽ có câu trả lời của bạn.

Một trích dẫn từ bài viết

Khi IIS các lĩnh vực yêu cầu cho các ứng dụng của bạn nó trao nó cho quá trình nhân. Quy trình công nhân ở số lần lượt tạo và thể hiện của lớp học Toàn cầu của bạn (thuộc loại HttpApplication). Từ thời điểm đó trên dòng chảy điển hình của ứng dụng ASP.NET diễn ra (đường ống dẫn ASP.NET ).Tuy nhiên, những gì bạn cần để biết và hiểu là công nhân quá trình (nghĩ về nó như IIS thực sự) giữ dụ của bạn HttpApplication (một trường hợp của bạn Global class) còn sống, để trường yêu cầu khác . Trên thực tế, theo mặc định, nó sẽ tạo và lưu trữ tối đa 10 trường hợp của lớp Toàn cầu của bạn, nếu yêu cầu (thuyết minh Lười biếng) tùy thuộc vào số lượng yêu cầu trang web của bạn nhận được các yếu tố khác . Trong hình 1 bên trên các trường hợp của ứng dụng ASP.NET được hiển thị dưới dạng các hộp màu đỏ. Có có thể lên đến 10 trong số các bộ nhớ cache này bằng cách quy trình công nhân. Đây là những chủ đề thực sự là rằng quy trình công nhân có được tạo và lưu vào bộ nhớ cache và mỗi luồng có trường hợp riêng của lớp Toàn cầu của bạn. Lưu ý rằng mỗi chủ đề trong số này là cùng một Miền ứng dụng. Vì vậy, bất kỳ lớp học tĩnh nào bạn có thể có trong ứng dụng của bạn được chia sẻ trên mỗi các chủ đề hoặc ứng dụng trường hợp này.

Tôi khuyên bạn nên đọc bài viết đó và tôi sẽ sẵn lòng trả lời bất kỳ câu hỏi nào bạn có thể có. Xin lưu ý rằng tôi đã cố ý giữ bài viết đơn giản ở chỗ tôi không nói về những gì xảy ra trong nhân hoặc đi vào chi tiết của các thành phần khác nhau tham gia. Giữ cho nó đơn giản giúp mọi người hiểu các khái niệm tốt hơn rất nhiều (tôi cảm thấy).

tôi sẽ trả lời một số câu hỏi khác của bạn ở đây:

  1. Có bất kỳ thuật toán cụ thể như thế nào đề chuyển nhượng xảy ra với IIS7?

Không, cho mọi mục đích, mục đích đó là ngẫu nhiên. Điều này giải thích trong bài báo tôi đã chỉ ra. Câu trả lời ngắn gọn là nếu một chuỗi được lưu trữ có sẵn thì II sẽ sử dụng nó. Nếu không, nó sẽ tạo ra một chủ đề mới, tạo và thể hiện của HttpApplication (Global) của bạn và gán tất cả ngữ cảnh cho nó. Vì vậy, trong một trang web không bận, bạn có thể thấy cùng một luồng xử lý các yêu cầu. Nhưng không co sự bảo đảm nao. Nếu có nhiều hơn một thread miễn phí IIS sẽ chọn một thread ngẫu nhiên để phục vụ yêu cầu đó. Bạn nên lưu ý ở đây, rằng ngay cả trong một trang web không quá bận rộn, nếu yêu cầu của bạn mất một thời gian dài, IIS sẽ bị buộc phải tạo ra các chủ đề mới để phục vụ các yêu cầu gửi đến khác.

  1. Có tối đa số chủ đề có sẵn không?

Có (như được giải thích trong bài viết) thường là 10 chủ đề cho mỗi quy trình công nhân. Điều này có thể được điều chỉnh nhưng tôi đã làm việc trên một số trang web cực kỳ bận rộn và tôi đã không bao giờ phải. Điều quan trọng là làm cho ứng dụng của bạn phản hồi nhanh nhất có thể. Bạn có thể có nhiều quy trình công nhân được gán cho nó (được cấu hình trong nhóm ứng dụng của bạn) trong các trang bận mà bạn thực sự muốn nhiều quy trình công nhân cho ứng dụng của bạn, tuy nhiên ý nghĩa là bạn có phần cứng cần thiết (lõi CPU và bộ nhớ).

  1. Scheduler là Quartz.net và id cho thấy là "Scheduler_Worker-10", và không chỉ là một số

Chủ đề có thể có những cái tên thay vì Id. Nếu chủ đề đã được gán một tên thì bạn sẽ thấy rằng thay vì một id.Tất nhiên cho các chủ đề IIS tạo ra bạn không có quyền kiểm soát như vậy. Tâm trí bạn, tôi đã không sử dụng (cũng không biết về Quartz) vì vậy tôi không biết về điều đó nhưng tôi đoán đó là trường hợp.

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