executor? Есть что-то более правильное, чем Runtime.getRuntime().getAvailableProcessors()?
мы так выбираем val numberOfCores = Runtime.getRuntime().availableProcessors() val corePoolSize = if (numberOfCores == 1) numberOfCores else (numberOfCores / 2)
Простите, а почему количество ядер делите на 2?
потому что есть реальные ядра и есть виртуальные, нам важны только реальные для выполнения
Однозначно сразу не посчитаешь. Если задачи для тред пула только нагружают процессор (т.е. нет никаких I/O операций, или блокирующих вызовов), то можно попробовать Ncpu + 1. Если задачи не полностью CPU-bound, то можно ставить больше. В любом случае для выбора оптимального количества потоков надо тестить под большой нагрузкой и смотреть на утилизацию CPU.
Спасибо
Советую почитать "Java Concurrency in Practice" Brian Goetz, у него эта тема описана в разделе 8
Обсуждают сегодня