Давайте предположим, что веб-сервис является бесконечно масштабируемым, и что никто не будет заботиться о том, что вы рассылаете его по спаму. Предположим также, что ответы веб-службы находятся в диапазоне 1 секунда, а время локальной обработки составляет 5 миллисекунд.
Пропускная способность максимальна, когда у вас столько же занятых потоков, сколько у процессорных ядер.
В соответствии с этими допущениями вы не сможете максимизировать пропускную способность многоядерного процессора для любого разумного размера пула потоков. Для достижения максимального количества транзакций в секунду вы должны разбить поток на модель соединения. Найдите упомянутый ранее неблокирующий ввод-вывод (NIO) или Java-реализацию шаблона токена асинхронного завершения (IO-завершение в Windows).
Обратите внимание, что стековая память, зарезервированная для каждого созданного потока, на самом деле просто зарезервирована адресное пространство , а не фактически выделенная или зафиксированная память. По мере того, как стек пытается расти, генерируются исключения, в результате чего память стека фиксируется по требованию. Следствием этого является то, что это действительно актуально только для 32-битных менеджеров памяти. Для 64-битной памяти у вас есть огромное адресное пространство, даже если вы зарезервировали только небольшую часть этого пространства физической памятью. По крайней мере, я так понимаю, что Windows работает, я не уверен в мире Unix.