Создает ли игровой сервер потоки для каждого пользовательского запроса (например, Dota 2)? - PullRequest
0 голосов
/ 23 октября 2018

Для базы пользователей 100 000 и 4 пользователей на игровой сеанс, должны ли мы создавать новые потоки для каждого запроса, такие как create_session, move_player, use_attack и т. Д.?

Я хотел бы знать, что будет оптимальнымспособ обработки больших соединений, потому что если мы создаем большое количество потоков, переключение контекста сожрет большую часть циклов, и если потоки не созданы, каждый запрос должен ждать завершения предыдущего запроса.

1 Ответ

0 голосов
/ 23 октября 2018

Я бы избегал потокового соединения, если ваша цель - масштабируемость.Было бы лучше иметь очередь событий и пул потоков.

Игровая компания, вероятно, будет использовать интернет-протокол без установления соединения, такой как UDP.Все запросы теоретически могут поступать в один и тот же сокет, так что вам нужен только 1 поток для обработки этого.Этот поток может назначить работу другим потокам.

Вы можете иметь больший пул потоков, где любому потоку может быть назначено любое задание.Или вы могли бы далее организовать работу в конкретные задания, каждое с пулом потоков для обработки очереди задач.Но я бы не стал запускать новый поток для каждого запроса.

То, как вы проектируете свои потоки и систему распределения задач, зависит от библиотек для того языка, который вы используете, и требований приложения.

...