В настоящее время у нас есть метод, который считывает данные клиента из нашей базы данных, проверяет данные для некоторых условий, а затем отправляет уведомления по электронной почте на основании того, выполнены ли эти условия.Многопоточность ответа? Обработка большого количества обработки
Этот процесс запускается каждую минуту
Однако, поскольку все больше клиентов будут добавлены к нашей системе, что такой же процесс необходимо повторить для каждого клиента.
Конечно, это не имело бы смысл сделать цикл по каждому клиенту, как так:
CUSTOMERS = get_all_customers() FOREACH(customer in CUSTOMERS) MyMethod(customer) END FOR
выше кажется очень неэффективным. там
CUSTOMERS = get_all_customers() FOREACH(customer in CUSTOMERS) StartNewThread(MyMethod(customer)) END FOR
ли какие-либо проблемы с этим:
Я имею в виду многопоточных подход будет работать лучше, как так? В частности, скажем, есть 10 клиентов, тогда я уверен, что все будет хорошо - 10 потоков будут охватывать. Но что происходит, когда есть 50 или 100 клиентов? Это означает, что каждую минуту будут созданы 100 нитей! Каковы мои альтернативы?
Async. Вместо того, чтобы создавать пучок потоков, которые, вероятно, будут сидеть, не делая ничего заблокированного, просто несколько потоков, которые не заблокированы, ждут ввода-вывода и прочее. – vcsjones
, так как есть тег .NET ... Я предполагаю, что вы можете использовать Задачи или напрямую использовать пул потоков и позволить этому обрабатывать много работы для вас по эффективности потоков. В противном случае, если вы всегда создаете больше потоков, чем у вас есть процессоры, вы все равно не получаете какой-либо производительности. – Scott