Я действительно запутался в 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)
[ДОПОЛНИТЕЛЬНО] Хорошие (основные) вещи для чтения, которые хотят понять, о чем мы говорим: