Я пишу Java-сервер, который использует простые сокеты для приема соединений от клиентов.Я использую довольно простую модель, где каждое соединение имеет свой собственный поток чтения из него в режиме блокировки.Псевдокод:
handshake();
while(!closed) {
length = readHeader(); // this usually blocks a few seconds
readMessage(length);
}
cleanup();
(потоки создаются из Executors.newCachedThreadPool()
, поэтому при их запуске не должно быть значительных накладных расходов)
Я знаю, что это немного наивнои это не очень хорошо масштабируется для многих соединений, если потоки были выделенными потоками ОС.Однако я слышал, что несколько потоков в Java могут совместно использовать один аппаратный поток.Это правда?
Зная, что я буду использовать виртуальную машину Hotspot под Linux, на сервере с 8 ядрами и 12 ГБ оперативной памяти, вы думаете, эта установка будет хорошо работать для тысяч соединений?Если нет, каковы альтернативы?