>А уже выделенная под стеки потоков память потом используется другими вновь созданными
>потоками? Или выделяется снова? Т.е. сервер будет разрастаться до размера,
>соответствующего кол-ву тредов при максимальной нагрузке и на этом остановится, или
>будет расти постоянно?
Память используется повторно. Рост возможен только при дальнейшем увеличении количества
одновременно запущенных потоков.
>И еще вопрос. Как определить минимально необходимый размер стека? Опытным что ли
>путем?
Зависит от программы, естественно. Кому-то 64K с ушами хватает, другим 1M мало.
На разных платформах вдобавок по-разному получается. Так что стоит попробовать,
если случаются спорадические SIGSEGV от вылета за границы стека - увеличить.
>Как вообще лучше выкручиваться, если мне нужен сервер, ориентированный на обработку по
>схеме открытие соединения - короткий ответ через него - закрытие соединения?
>Может литературой какой кто в меня кинет? А то сам ничего
>толкового не найду.
>Спасибо.
Лучше не плодить по потоку на каждое соединение, а создать выделенный пул из
фиксированного числа рабочих потоков. В главном потоке ловить новые подключения
либо активность на уже существующих подключениях с помощью poll()/select().
Затем дескрипторы соединений с клиентами помещать в очередь. Рабочие потоки
должны дескрипторы по одному из очереди забирать, выполнять работу с клиентом
и дескриптор возвращать главному потоку (или закрывать, если на каждую операцию
открывается отдельное соединение). Схема, в принципе, стандартная.