Один поток на клиента. Выполнимо?

Я пишу сервер Java, который использует простые сокеты для приема соединений от клиентов. Я использую довольно простую модель, в которой каждое соединение имеет свой собственный поток, читающий его в режиме блокировки. Псевдокод:

handshake();

while(!closed) {
  length = readHeader(); // this usually blocks a few seconds
  readMessage(length);
}

cleanup();

(Потоки создаются из Executors.newCachedThreadPool () , поэтому не должно быть при их запуске не будет никаких значительных накладных расходов)

Я знаю, что это немного наивная установка, и она не очень хорошо масштабировалась бы для многих соединений, если бы потоки были выделенными потоками ОС. Однако я слышал, что несколько потоков в Java могут совместно использовать один аппаратный поток. Это правда?

Зная, что я буду использовать виртуальную машину Hotspot в Linux на сервере с 8 ядрами и 12 ГБ ОЗУ, как вы думаете, эта установка будет работать для тысяч подключений? Если нет, то каковы альтернативы?

19
задан Bart van Heukelom 5 October 2010 в 21:23
поделиться