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