Почему только ASP.NET имеет модель асинхронного программирования? - PullRequest
5 голосов
/ 19 ноября 2009

Я работаю с ASP.NET. ИМХО, поддержка асинхронного программирования в ASP.NET прекрасна. То есть мы можем использовать метод пары BeginXXXX / EndXXXX для улучшения масштабируемости для ресурсоемкой задачи.

Например, одна операция должна получить огромные данные из базы данных и отобразить их на ответной веб-странице. Если у нас эта операция синхронная. Поток, обрабатывающий этот запрос, будет занят в течение всего жизненного цикла страницы. Поскольку потоки ограничены в ресурсах, всегда лучше программировать работу с вводом / выводом асинхронно. То есть ASP.NET выделит поток для вызова метода BeginXXXX с функцией обратного вызова. Поток вызывает BeginXXXX немедленно возвращается и может быть организован для обработки других запросов. Когда работа выполнена, вызывается функция обратного вызова, и ASP.NET вызывает EndXXXX, чтобы получить фактический ответ.

Эта модель асинхронного программирования может полностью использовать преимущества потоковых ресурсов. Несмотря на то, что ThreadPool имеет ограничение, он может обрабатывать гораздо больше запросов. Однако, если мы программируем синхронно и каждый запрос требует длительных операций ввода-вывода, количество одновременных запросов не будет превышать размер пула потоков.

Недавно у меня появилась возможность изучить другие решения для веб-разработки, такие как PHP и Ruby on Rails. К моему удивлению, эти решения не имеют аналога модели асинхронного программирования. Каждый запрос обрабатывается одним потоком или процессом в течение всего жизненного цикла. То есть поток или процесс занят до отправки последнего бита ответа.

Есть что-то похожее на асинхронно (http://netevil.org/blog/2005/may/guru-multiplexing),, но суть в том, что для запроса всегда занят один поток или процесс. Это не похоже на ASP.NET.

Итак, мне интересно: почему у этого популярного веб-решения нет модели асинхронного программирования, такого как ASP.NET? Почему только ASP.NET развивается, чтобы использовать асинхронный подход?

Это потому, что PHP и Ruby-on-Rails в основном развернуты в Linux? И Linux не страдает от снижения производительности процессов / потоков, как Microsoft Windows?

Или, на самом деле, есть асинхронное решение для PHP и Ruby-on-Rails, которое я не нашел?

Спасибо.

1 Ответ

4 голосов
/ 19 ноября 2009

У меня нет однозначного ответа на ваш вопрос, но я могу сделать обоснованное предположение.

Системы, такие как PHP и Ruby, разработаны так, чтобы быть очень независимыми от платформы, тогда как ASP.NET глубоко интегрирован в платформу Windows. Кроме того, PHP больше похож на старый стиль ASP с линейным потоком от начала до конца.

Полные асинхронные страницы в стиле ASP.NET требуют не только потоков, но и собственного асинхронного ввода-вывода, чтобы использовать их максимально эффективно. Асинхронный ввод-вывод - это специфическая для ОС возможность. Асинхронные страницы также опираются на концепцию жизненного цикла страницы, которая является анафемой для стиля линейного потока. Без жизненного цикла страницы становится намного сложнее интегрировать результаты асинхронных вызовов с остальной частью вашей страницы.

Только мои два цента, YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...