ThreadPools для ускорения сайта

2

Я попытался выяснить, хорошо ли использование ThreadPools на сайте ASP.NET. Там много дискуссий по этому поводу, но трудно найти официальный источник.

Я создаю сайт, на котором пользователь заполняет форму и нажимает кнопку отправки, это вызывает отправку почты. Моя проблема заключается в том, что API-интерфейс моего поставщика почты довольно медленный (от 100 мс до 12 секунд), и это не очень удобно для оперативности приложения.

Это хорошая идея?:

ThreadPool.QueueUserWorkItem(e =>
    EmailFactory.BuildBuyerEmailValidationEmail(client).Send()
);

Форма используется около 100-200 раз в день.

Я бы хотел избежать создания очереди, так как это увеличило бы сложность приложения.

Теги:
multithreading

4 ответа

2
Лучший ответ

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

3

Другой вариант - настроить веб-службу (например, WCF), которая обрабатывает всю вашу маршрутизацию электронной почты. Затем вы можете настроить метод службы как односторонний вызов, чтобы при нажатии пользователем кнопки он запускает запрос на веб-сервис и мгновенно возвращается на страницу, так как он не дожидается, когда веб-служба будет обрабатываться. IMO Я бы не пытался напрямую работать с потоками в IIS и управлять им потоками так, как он хочет.

2

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

1

Возможны две проблемы: 1) IIS может убить фоновый поток во время перезагрузки домена приложения (ThreadPool thread) 2) Под высоким давлением фактическая работа в ThreadPool может быть запланирована гораздо позже, чем обычно (когда достигается максимальное количество потоков, элемент сохраняется в очереди в памяти до тех пор, пока не будет доступный поток)

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню