Я создаю HTTPServer, который должен обрабатывать несколько запросов одновременно.Установите доступные процессоры в Executors.newFixedThreadPool в HTTPServer
Основная функция того, что я построил, выглядит так:
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/", new MyRequestDispatcher());
server.setExecutor(Executors.newCachedThreadPool());
server.start();
}
Сейчас я думаю о том, как это Executors.newCachedThreadPool()
работы относительно количества нитей, созданных. Поскольку я прочитал, что количество создаваемых потоков не ограничено, если я получу тысячу запросов одновременно, создаст ли он тысячу потоков?
Я думаю об ограничении количества потоков, созданных в то же время, для правильной обработки в машине, на которой он выполняется. Я подумал над чем-то вроде этого:
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
Цель состоит в том, чтобы создать только определенное количество потоков в зависимости от доступных процессоров в системе.
Будет ли это работать?
Спасибо заранее!
Вы можете, но не обязательно оптимально, если потоки выполняют что-либо, что блокирует - если у вас больше потоков, вы можете выполнять работу, пока блокированные ждут. Вы всегда можете установить ограничение на количество потоков в кэшированном пуле потоков - посмотрите на реализацию 'Executors.newCachedThreadPool()' vs 'Executors.newFixedThreadPool (int)'. –
Спасибо Энди! Я посмотрю на них –