2012-08-02 29 views
5

Tôi có một biến thể của lợi ích-of-async/await-on-ASP.NET từ this question.ASP.NET async/await part 2

Sự hiểu biết của tôi là không đồng bộ không giống như song song. Vì vậy, trên một máy chủ web, tôi tự hỏi về bao nhiêu lợi ích async/await mang đến cho các trang ASP.NET.

Không phải IIS + ASP.NET đã thực sự tốt trong việc phân bổ luồng cho các yêu cầu, và nếu trang đang bận chờ đợi một tài nguyên, máy chủ sẽ chuyển sang xử lý một yêu cầu khác có hoạt động không?

Có một số lượng giới hạn các chủ đề trong nhóm để ASP.NET sử dụng - không sử dụng async hiệu quả hơn?

Như ông Skeet đã chỉ ra trong việc trả lời câu hỏi ở trên, chúng tôi không nói về việc chặn một chuỗi giao diện người dùng. Chúng tôi đã đa luồng và phản hồi web không thể hoàn thành cho đến khi tất cả các nhiệm vụ của yêu cầu được thực hiện, không đồng bộ hay không, phải không?

Tôi đoán những gì nó nắm để là thế này:

Có bất kỳ lợi ích cho một đọc async của một tài nguyên (ví dụ một tập tin hoặc DB theo yêu cầu) trong một trang ASP.NET vs chặn trên đó?

+0

Bạn có thực sự đọc câu trả lời của Jon Skeet mà bạn đã đề cập không? Ông giải thích những lợi ích của việc sử dụng 'async' trong ASP.NET. – svick

+0

@svick: Cảm ơn bạn đã đọc. Vâng, tôi đã đọc câu trả lời của Jon nhưng trong rất nhiều trường hợp anh ấy nói "nó phụ thuộc", tôi đoán đó là câu trả lời duy nhất anh * có thể * cho. Tôi muốn hiểu ý nghĩa luồng của async/await trên một máy chủ web có khối lượng cao. – n8wrl

Trả lời

8

nếu một trang đang bận chờ tài nguyên, máy chủ sẽ chuyển sang xử lý một yêu cầu khác có tác vụ phải làm?

Tôi không nghĩ vậy. Tôi sẽ là rất ngạc nhiên nếu đây là trường hợp. Đó là lý thuyết có thể, nhưng rất phức tạp.

Có một số lượng giới hạn các chủ đề trong nhóm để ASP.NET sử dụng - không sử dụng async hiệu quả hơn?

Có, bởi vì khi bạn await thứ gì đó, chuỗi cho yêu cầu đó ngay lập tức được trả lại vào hồ bơi.

Chúng tôi đã đa luồng và phản hồi web không thể hoàn thành cho đến khi tất cả các yêu cầu của công việc được thực hiện, không đồng bộ hay không, phải không?

Điều đó là chính xác. async trong một kịch bản máy chủ là tất cả về loại bỏ áp lực trên hồ bơi thread.

Có lợi ích nào cho việc đọc đồng bộ tài nguyên (nói một tệp hoặc yêu cầu DB) trong trang ASP.NET so với chặn trên đó không?

Tuyệt đối!

Nếu bạn chặn một yêu cầu gọi/yêu cầu tập tin/dịch vụ, thì chuỗi đó được sử dụng trong suốt thời gian hoạt động đó. Nếu bạn await yêu cầu cuộc gọi/yêu cầu dịch vụ/tệp, thì chuỗi đó sẽ được trả về ngay lập tức cho nhóm chủ đề.

Kết quả Một (thực sự thú vị!) Là bạn có thể yêu cầu và trong khi (a) đợi một số hoạt động, có không chủ đề phục vụ yêu cầu đó! Zero-threaded concurrency, nếu bạn muốn.

Khi hoạt động hoàn tất, phương thức tiếp tục sau await - trên một chuỗi (có thể khác) từ nhóm chủ đề.

Kết luận: async quy mô tốt hơn so với chủ đề, vì vậy chắc chắn có một lợi ích ở phía máy chủ.

Thông tin khác: my own intro to async postthis awesome video.

+0

Lợi ích trước từ [answer] (http://stackoverflow.com/a/30574578/1497596) gần đây của bạn: "Nếu bạn đang nói về ASP.NET MVC với một cơ sở dữ liệu phụ trợ, thì bạn (Điều này là do IIS có thể xử lý các yêu cầu đồng thời hơn nhiều so với một cá thể máy chủ SQL (hoặc các RDBMS cổ điển khác) Tuy nhiên, nếu chương trình phụ trợ của bạn hiện đại hơn - một câu lệnh SQL cụm máy chủ, Azure SQL, NoSQL, v.v. và chương trình phụ trợ của bạn có thể mở rộng quy mô và nút cổ chai khả năng mở rộng của bạn là IIS, * sau đó * bạn có thể nhận được lợi ích mở rộng từ 'async'. " – DavidRR

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