Таким образом, недавно был большой акцент почти всеми поставщиками платформы для обеспечения новых конструкций инструментов/языка для лучшего параллелизма. И это - также одна из причин, почему много идей с языков функционального программирования интегрируется на основные языки как C#, Java и т.д.
Даже при том, что они имеют много смысла сегодня особенно с введением многоядерных центральных процессоров, но я хотел знать, как можно использовать их в особенно в домене веб-приложений. В веб-приложениях большим параллелизмом управляет сам веб-сервер, и очень редко делайте я вижу многопоточность, реализованную в веб-страницах. Ajax также позволил "pagelets" как парадигма помочь далее.
Веб-приложения обычно состоят из выборки результатов быстро, и до настоящего времени мы использовали много тактики как кэширование, дублирование и т.д. для достижения этой цели. Если было что-то, что было, вычисляют интенсивный, это должно было произойти офлайн (и клиенты могли запросить для результатов позже, или обратные вызовы могли быть реализованы).
Параллелизм отчасти уже реализован в большом количестве библиотек/платформ, которые обычно используются в веб-приложениях как база данных, мультивходит в платформы как memcached.
Я не мог найти много демонстрационных сценариев, в которых недавние платформы параллелизма и библиотеки могут использоваться в контексте веб-приложений. Таким образом, я хотел бы знать, имеют ли они много смысла в веб-домене.
Строгий взгляд на то, что все синхронно и непротиворечиво, недостаточно хорошо масштабируется. Тогда есть тенденция иметь больше данных асинхронных и принимать возможную согласованность . Это также отражается на способе разработки языков и фреймворков.
Много вдохновения черпает из функциональной области , потому что она хорошо подходит для этого режима вычислений.Функциональное программирование помогает понять , что выполнять, а не , как и , когда .
Фактически дополняет традиционный в остальном механизм для работы с параллелизмом.
Мне не удалось найти много примеров сценариев, в которых последние платформы и библиотеки параллелизма могут использоваться в контексте веб-приложений. Итак, я хотел бы знать, имеют ли они много смысла в веб-сфере.
Это зависит от того, что вы имеете в виду. Нет необходимости использовать низкоуровневую конструкцию, такую как та, что в java.util.concurrent
. Но асинхронность все лучше и лучше поддерживается в стеках фреймворка. Например, Servlet 3.0 представляет асинхронный веб-запрос для упрощения разработки приложений AJAX . Как следствие, EJB 3.1 имеет вызов асинхронного метода для интеграции с асинхронным веб-уровнем. Внизу у нас есть низкоуровневая абстракция функции (или делегата, закрытия), которая абстрагирует само вычисление и информацию, необходимую для вычисления (его контекст). Думаю, то же самое и с .NET.
Не относящееся к традиционным веб-приложениям, а скорее к сети как «облаку», функциональное программирование помогает с распределенными вычислениями между процессорами и узлами . Хорошо известный пример - map / reduce и тому подобное, которые нацелены на обработку большого набора данных.
Все это совпадает, и мы видим веб-приложение, которое остается отзывчивым, в то время как большой набор данных обрабатывается асинхронно.
Но нет, для традиционного веб-приложения все это вам не понадобится!
Да, в высокопроизводительном сервере и длительных задачах
Проверьте Асинхронные контроллеры в ASP. Net MVC
Поскольку веб-приложения по умолчанию работают одновременно, вы с меньшей вероятностью будете использовать новые механизмы параллелизма (такие как TPL или PLINQ для .NET) в веб-приложениях. Обычно вы ничего не получите на веб-сервере с высокой нагрузкой (вы бы ускорили один запрос, замедлив другой запрос). Однако, если у вас есть выделенный веб-сервер, который не обслуживает большую часть своих циклов ЦП (при наличии нескольких ядер), эти методы могут быть полезны.
[Обновление:] Просто прочтите новую статью в блоге Параллельное программирование с .NET . Вот две интересные цитаты:
В большинстве случаев, и в частности для веб-приложений с интенсивным использованием, , вероятно, нет необходимости вводить дополнительный параллелизм , поскольку добавление дополнительных рабочие элементы приведут только к конкуренции за процессорное время и в конечном итоге снизят пропускную способность запросов.
и:
Веб-приложения, которым необходимо выполнять дорогостоящие вычисления, могут по-прежнему выиграть от параллелизма, если задержка отдельного запроса больше важнее общей пропускной способности запросов.
Думаю, это ответ на ваш вопрос.
Чтобы ответить на ваш вопрос ...
Если что-то требовало больших вычислительных ресурсов, это должно происходить в автономном режиме (и клиенты могли запрашивать результаты позже или обратные вызовы могут быть реализованы).
Это именно та часть, где иногда требуется фоновый параллелизм (на сервере) и предпочтительнее, чем веб-поток, порожденный Ajax:
Несомненно, платформы параллелизма имеют большой смысл в веб-приложениях. Достаточно взглянуть, например, на SO (и платформу multi-tenancy StackExchange ) - должно быть много случаев, когда один и тот же объект (вопрос, ответ и т. Д.) Обновляется «одновременно». Я полагаю, это было бы большим вниманием к подобному программному обеспечению.
Практически весь параллелизм в веб-приложениях основан на многопользовательском взаимодействии. Часто это всего лишь «один процесс на пользователя», без общего знаменателя и, возможно, связанный только на уровне базы данных, но такие приложения, как Flockdraw, usteream и другие, которые группируют множество пользователей вместе в реальном времени, поддерживают их взаимосвязь и синхронизацию с помощью нескольких потоков, берущих на себя нагрузку отдельных пользователи, но активно взаимодействуют друг с другом в реальном времени.