Параллелизм в веб-приложениях

Таким образом, недавно был большой акцент почти всеми поставщиками платформы для обеспечения новых конструкций инструментов/языка для лучшего параллелизма. И это - также одна из причин, почему много идей с языков функционального программирования интегрируется на основные языки как C#, Java и т.д.

Даже при том, что они имеют много смысла сегодня особенно с введением многоядерных центральных процессоров, но я хотел знать, как можно использовать их в особенно в домене веб-приложений. В веб-приложениях большим параллелизмом управляет сам веб-сервер, и очень редко делайте я вижу многопоточность, реализованную в веб-страницах. Ajax также позволил "pagelets" как парадигма помочь далее.

Веб-приложения обычно состоят из выборки результатов быстро, и до настоящего времени мы использовали много тактики как кэширование, дублирование и т.д. для достижения этой цели. Если было что-то, что было, вычисляют интенсивный, это должно было произойти офлайн (и клиенты могли запросить для результатов позже, или обратные вызовы могли быть реализованы).

Параллелизм отчасти уже реализован в большом количестве библиотек/платформ, которые обычно используются в веб-приложениях как база данных, мультивходит в платформы как memcached.

Я не мог найти много демонстрационных сценариев, в которых недавние платформы параллелизма и библиотеки могут использоваться в контексте веб-приложений. Таким образом, я хотел бы знать, имеют ли они много смысла в веб-домене.

14
задан Aayush Puri 8 February 2010 в 10:46
поделиться

6 ответов

Строгий взгляд на то, что все синхронно и непротиворечиво, недостаточно хорошо масштабируется. Тогда есть тенденция иметь больше данных асинхронных и принимать возможную согласованность . Это также отражается на способе разработки языков и фреймворков.

Много вдохновения черпает из функциональной области , потому что она хорошо подходит для этого режима вычислений.Функциональное программирование помогает понять , что выполнять, а не , как и , когда .

Фактически дополняет традиционный в остальном механизм для работы с параллелизмом.

Мне не удалось найти много примеров сценариев, в которых последние платформы и библиотеки параллелизма могут использоваться в контексте веб-приложений. Итак, я хотел бы знать, имеют ли они много смысла в веб-сфере.

Это зависит от того, что вы имеете в виду. Нет необходимости использовать низкоуровневую конструкцию, такую ​​как та, что в java.util.concurrent . Но асинхронность все лучше и лучше поддерживается в стеках фреймворка. Например, Servlet 3.0 представляет асинхронный веб-запрос для упрощения разработки приложений AJAX . Как следствие, EJB 3.1 имеет вызов асинхронного метода для интеграции с асинхронным веб-уровнем. Внизу у нас есть низкоуровневая абстракция функции (или делегата, закрытия), которая абстрагирует само вычисление и информацию, необходимую для вычисления (его контекст). Думаю, то же самое и с .NET.

Не относящееся к традиционным веб-приложениям, а скорее к сети как «облаку», функциональное программирование помогает с распределенными вычислениями между процессорами и узлами . Хорошо известный пример - map / reduce и тому подобное, которые нацелены на обработку большого набора данных.

Все это совпадает, и мы видим веб-приложение, которое остается отзывчивым, в то время как большой набор данных обрабатывается асинхронно.

Но нет, для традиционного веб-приложения все это вам не понадобится!

4
ответ дан 1 December 2019 в 14:32
поделиться

Да, в высокопроизводительном сервере и длительных задачах

Проверьте Асинхронные контроллеры в ASP. Net MVC

2
ответ дан 1 December 2019 в 14:32
поделиться

Поскольку веб-приложения по умолчанию работают одновременно, вы с меньшей вероятностью будете использовать новые механизмы параллелизма (такие как TPL или PLINQ для .NET) в веб-приложениях. Обычно вы ничего не получите на веб-сервере с высокой нагрузкой (вы бы ускорили один запрос, замедлив другой запрос). Однако, если у вас есть выделенный веб-сервер, который не обслуживает большую часть своих циклов ЦП (при наличии нескольких ядер), эти методы могут быть полезны.

[Обновление:] Просто прочтите новую статью в блоге Параллельное программирование с .NET . Вот две интересные цитаты:

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

и:

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

Думаю, это ответ на ваш вопрос.

6
ответ дан 1 December 2019 в 14:32
поделиться

Чтобы ответить на ваш вопрос ...

Если что-то требовало больших вычислительных ресурсов, это должно происходить в автономном режиме (и клиенты могли запрашивать результаты позже или обратные вызовы могут быть реализованы).

Это именно та часть, где иногда требуется фоновый параллелизм (на сервере) и предпочтительнее, чем веб-поток, порожденный Ajax:

  • Фоновые вычисления могут быть слишком длинными для сеанса , поэтому вы не можете использовать веб-поток (вы бы прервали сеанс).
  • Фоновые вычисления могут не нуждаться в хранении большого количества информации, которая в противном случае необходима для этого пользователя, им может потребоваться гораздо меньше контекста, что хорошо для освобождения памяти .
  • Ночные пакеты могут обрабатывать огромные таблицы базы данных по кускам и требовать монопольного доступа к этим таблицам. Многопоточность может потребоваться, чтобы сократить время вычислений до приемлемой продолжительности (позволяя выполнять другие задачи или пользователям получать доступ к результатам после приемлемой продолжительности). Нередко останавливать взаимодействие с пользователем в течение определенного периода времени ночью и обрабатывать некоторые пакеты, и овладение параллельными взаимодействиями в это время может быть критичным.
1
ответ дан 1 December 2019 в 14:32
поделиться

Несомненно, платформы параллелизма имеют большой смысл в веб-приложениях. Достаточно взглянуть, например, на SO (и платформу multi-tenancy StackExchange ) - должно быть много случаев, когда один и тот же объект (вопрос, ответ и т. Д.) Обновляется «одновременно». Я полагаю, это было бы большим вниманием к подобному программному обеспечению.

0
ответ дан 1 December 2019 в 14:32
поделиться

Практически весь параллелизм в веб-приложениях основан на многопользовательском взаимодействии. Часто это всего лишь «один процесс на пользователя», без общего знаменателя и, возможно, связанный только на уровне базы данных, но такие приложения, как Flockdraw, usteream и другие, которые группируют множество пользователей вместе в реальном времени, поддерживают их взаимосвязь и синхронизацию с помощью нескольких потоков, берущих на себя нагрузку отдельных пользователи, но активно взаимодействуют друг с другом в реальном времени.

0
ответ дан 1 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: