Быстрый thread pool для бенчмарков

236
12 апреля 2018, 14:34

Мне необходимо в бенчмарке выполнять некоторые операции в другом потоке, для того что бы их не создавать каждый раз, я хочу иметь трэд пул и в нем выполнять эти операции.

Достаточно ли быстрый джавовый ExecutorService или стоит написать свой ?

Answer 1

Судя по тому что происходит внутри кода ThreadPoolExecutor, вам он не подходит. Потому что внутри него создается поток для новой задачи, этого можно избежать, создав такой поток с помощью пустой задачи заранее, но все же много логики остается. Думаю что-то своё, что будет в цикле ожидать появления чего либо в AtomicReference или ConcurrentQueue будет быстрее.

Это с одной стороны. С другой стороны, не забывайте, что в любом случае есть такая штука как операционная система и время на переключения контекста при смене потока. Вам все равно не получится избежать некоторых задержек. (если вы когда нибудь писали тесты скажем на си, то там всегда результаты отличались на 10-20, порой даже на 100мс - вот вам и система)

То есть у вас уже есть ограничения на длительность теста, чтобы можно было как-то свести работу системы до "в пределе погрешности".

В третьих Java машина. Она постоянно оптимизирует код, ориентироваться на цифры полученые просто самописными тестами с System.currentTimeMillis очень сложно. Это уже тема отдельного вопроса, есть определенные бенчмарки, есть списки правил, что-то конкретное подсказать сложно, не было у меня необходимости еще получать точные цифры.

В четвертых, это что такой за бенчмарк с отдельными потоками? Конечно может быть у вас там "всё схвачено" и вы понимаете что делаете, но звучито это странно. По крайней мере в совокупности с заморочками насчет скорости тред пула.

В общем как вывод - тред пул далеко не самая большая проблема что у вас возникает. Используйте обычный ThreadPoolExecutor, если вдруг вам покажется, что он на что-то там влияет, ну напишите свою реализацию. Это по факту дело 10 минут.

READ ALSO
javaFx vBox Stretch layout

javaFx vBox Stretch layout

Как сделать, чтобы некоторые элементы, расположенные в Vbox не растягивалисьСкажем, там у меня есть Vbox, и там 2 элемента, изображение и таблица

237
iText PDF: запись HTML в PDF в кодировке UTF-8

iText PDF: запись HTML в PDF в кодировке UTF-8

Задача: из переданного HTML создать что-то наподобие печати (в заданных координатах) внутри существующего PDF-документаЯ нашел два варианта...

301
Как объединить все элементы в коллекции в одну строку и проставить между ними запятую?

Как объединить все элементы в коллекции в одну строку и проставить между ними запятую?

Есть List, типа String, хочу вывести все элементы в одну строчку, через запятую

245
Получение нового токена

Получение нового токена

Добрый день! Проблемка с авторизациейАвторизация в приложении осуществляется по логину и паролю от личного кабинета на сайте

234