Задать вопрос
@mrAvenger

Async or multithread вот в чем вопрос, что выбрать?

Добрый день, занимаемся разработкой серверной платформы для игрушки, на данный момент держим 3300+ активных соедененией и получаем сильный просад по производительности.

Есть желание переехать на другую машину, на данный момент выигрываем мы от герц, а не от кол-ва процессоров, но пока это, не очень весело, так как мы уперлик в i7 с частой в 4700, а найти что то выше на открытом рынке выделенных серверов просто не реально. Есть желание перепилить полностью систему обновлений, и пока стоит открытым вопрос какой же метод выбрать, асинхронность или ручное управление потоками.

Чем вообще занимается сервер:
* AI существ в мире
* Обработка коллизий, поиск и обработка путей для игровых существ
* Обработка, соответственно передвижений, взаимодействий меж игроками, обработка их персонажей и многое другое
* Работа с базой, сохранение, загрузка

Т.е есть как и сильный IO, так и расчеты.
В даный момент у нас есть тестовый сервер с 48 тредами с частой 2000, на котором мы провалили тестирование с ручными управлением потоками, большая часть серверов которые можно найти на рынке делаю упор на кол-во ядер, а не на производительность каждого из них.

Собственно по моим теор. знаниям асинхронность требует доп. ресурсов на хранение промежуточной информации и для ее восстановления.

Что же делать в нашем случае?

PS: Проблем, в частности с объемами используемой оперативной памяти не возникает, тоесть ее много и ресурсы нам не жалко.
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Асинхронное программирование
Седой и строгий
Асинхронные программы как раз потребляют меньше памяти и имеют меньший оверхед на переключении контекста. Но асинхронная программа в принципе не может использовать больше одного ядра. Для параллелизма только потоки. Ну, либо гибридный вариант - запускать по потоку на ядро, в каждом из которых будет крутиться свой асинхронный цикл событий, как в Go. Но в таком варианте логика синхронизации сопрограмм будет непростой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Асинхронность хороша в задачах стиля - немного посчитали, долго ждем (неважно чего), еще немного посчитали, снова долго ждем и т.д. Так как позволяет равномерно размазать время активного использования процессора по разным задачам.

Из вашего описания заасинхронить можно только

* Работа с базой, сохранение, загрузка
остальное, как я понял - числодробилки.

В любом случае описание слишком общее. Однозначно не ответить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы