Показать сообщение отдельно
Старый 02.04.2017, 03:39   #19
Местный
 
Регистрация: 22.10.2014
Сообщений: 122
Сказал Спасибо: 1
Имеет 8 спасибок в 7 сообщенях
alexov пока неопределено
По умолчанию

Цитата:
Сообщение от supernewbie Посмотреть сообщение
alexov, можно изловчиться и сделать один буфер на один поток, передавая этот буфер текущему боту с которым поток работает.
в итоге если ядер скажем 4, то это всего-лишь 4 * 64K байт на буферы
можно изловчиться и сделать 10-20 переменных во всей программе и переиспользовать их по мере освобождения) но это потребует такой нетривиальной логики которую ни один человек не осилит)

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

Так вот к чему это я. Если для каждого клиента создать полный контекст из данных которые ему нужны, включая буфер для сетевых данных, код получается простой и красивый, потому что нам не важно в каком порядке на самом деле исполняется код. Но как только мы заведем общий буфер для группы клиентов, сразу появляются ограничения на то как мы должны писать код, чтобы этот буфер не запороть. Не знаю как это понятнее объяснить, но я думаю что те кто уже пишет асинхронный код, должны понять.
alexov вне форума   Ответить с цитированием