Async-Await против ThreadPool против MultiThreading на высокопроизводительных сокетах (решения C10k?)
Я действительно смущенasync-await
s,pool
с иthread
s. Основная проблема начинается с этого вопроса: «Что я могу сделать, когда мне приходится обрабатывать ввод / вывод 10k сокетов?» (акаПроблема C10k).
Queue
и несколькоThread
s для обработки всех входящих данных. Это был большой опыт пониманияthread-safety
а такжеmulti-threading
ноthread
являетсяизлишество сasync-await
Настоящее время.Позже я реализовал простую архитектуру сasync-await
но я не могу понять почему«Ключевые слова async и await не приводят к созданию дополнительных потоков». (из MSDN)? Я думаю, что должно бытьthread
s, чтобы делать такие работы, какBackgroundWorker.Наконец, я реализовал другую архитектуру сThreadPool
и это похоже на мой первый пользовательский пул.Теперь я думаю, что должен быть кто-то еще со мной, кто запутался в обращенииC10k, Мой проект - это выделенный (центральный) сервер для моего игрового проекта, подобный серверу хаб / лоббиMCSGЛобби или COD сватовства серверов. Я буду выполнять операции входа в систему, выполнения / запросы команд игрового сервера и обслуживание информации (например, версию, патч).
Последняя часть может быть более конкретной о моем проекте, но мне действительно нужны некоторые хорошие предложения о реальных решениях о множественной (тяжелой) обработке данных.
(Также да, обработка соединения 1k-10k-100k в зависимости от аппаратного обеспечения сервера, но это общий вопрос)
Ключевой момент:Выбор между библиотекой параллельных задач и ThreadPool (Блог MSDN)
[ДОПОЛНИТЕЛЬНЫЕ] Хорошие (базовые) вещи для чтения, кто хочет понять, о чем мы говорим:
ПотокиAsync, AwaitThreadPoolBackgroundWorker