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