Так как вы упомянули C ++ ...
Если вы работаете на платформе Windows, вы должны искать порты завершения ввода / вывода для такого рода масштабируемости. Порты завершения ввода / вывода позволяют выполнять асинхронный ввод / вывод на сокетах (и других устройствах) с использованием небольшого количества потоков для обслуживания многих тысяч операций ввода / вывода (т.е. соединений).
Способ, которым это работает, заключается в том, что порт завершения ввода / вывода, по сути, является очередью, но операционная система оптимизирует способ освобождения потоков для работы с рабочими элементами в этой очереди, чтобы предотвратить одновременное освобождение слишком большого количества потоков и обеспечить что поток, который только что использовался, более вероятно, будет использоваться снова. См. Здесь: http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx для информации MSDN о IOCP и здесь: http://www.serverframework.com/products---the-free-framework.html для исходного кода моей бесплатной клиент-серверной платформы, которая использует IOCP под прикрытием.
В качестве примера возможной масштабируемости в этой публикации блога (http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html) я подробно описываю, как мне удалось добиться более 70 000 одновременных подключений на компьютере под управлением Windows Server 2003 с оперативной памятью всего 760 МБ.
Обратите внимание, что операции асинхронного сокета C # используют IOCP под капотом.