GoalОбработка изоляции пула потоков?
Я хочу понять, как обрабатывать два пула потоков одновременно в java?
Рассмотрите систему клиентских серверов, в которой клиенты отправляют на сервер блокирующие запросы ввода-вывода (например, файловый сервер). На сервере работает один экземпляр ThreadPoolExecutor. Некоторые запросы клиентов требуют гораздо больше времени для обработки, чем другие запросы. Эти запросы называются высокими запросами интенсивности ввода-вывода. Эта высокая интенсивность ввода-вывода требует опрокидывания всех потоков и уничтожения всего приложения.
Я хочу решить эту проблему двумя отдельными ThreadPoolExecutor. Я создаю два экземпляра ThreadPoolExecutor, один для запросов высокой интенсивности ввода-вывода и другой для запросов с низкой интенсивностью ввода-вывода, а также через автономную рабочую процедуру. Я создаю таблицу поиска для классификации запросов, и когда приходит запрос, я сначала просматриваю его класс в так что я могу передать его в соответствующий пул потоков.
Реальная проблема. Как распределять процессоры поровну с этими двумя пулами потоков. Будет ли эта задача решаться самим JVM, или я должен сам ее обработать на уровне приложения? Должен ли я использовать кластер и использовать другую машину, которая запускает экземпляр ThreadPoolExecutor для обработки запросов высокой интенсивности ввода-вывода? Просьба дать мне правильные дизайнерские предложения.
Вы не можете решить, сколько ресурсов обрабатываются для потоков, это решение ядра, а не ваша (к счастью). Но вы можете отдать приоритет тем. – m0skit0
Вы посмотрели на [Striped Executor] профессора Кабуца (http://www.javaspecialists.eu/archive/Issue206.html). Похоже, он будет делать то, что вам нужно, или, по крайней мере, вариант этого. – OldCurmudgeon