Потоки Java в Потоках - PullRequest
0 голосов
/ 05 июля 2018

У меня есть приложение, которое вставляет заголовок и подробные данные в таблицы базы данных (2 таблицы 1 для информации заголовка и 1 для подробной информации). Мой текущий подход заключается в равномерном распределении деталей в моих темах. Заголовок будет содержать в среднем 100 000 деталей.

Я хочу изменить свой подход к обработке нескольких заголовков. Я инкапсулирую логику заголовка 1 в функцию (эта функция будет содержать многопоточность для ее деталей) и вызову эту функцию в нескольких потоках (количество заголовков) или в пуле потоков (используя Executors).

Это лучший способ решить эту проблему или есть лучшая практика для такой проблемы? Также будет ли установка приоритетов для потоков влиять на поток потоков? (Я установлю более высокие приоритеты для заголовков и оставлю настройки по умолчанию для деталей)

1 Ответ

0 голосов
/ 06 июля 2018

Учитывая характер проблемы, которую вы описали, вполне вероятно, что основным узким местом приложения будет ввод-вывод базы данных. Это должно быть решено в первую очередь. Некоторые общие практики:

  • учитывайте гранулярность транзакций в вашей базе данных: вы достигнете лучшей производительности, если сгруппируете несколько вставок деталей в транзакцию, чем если бы вы вставляли детали по одной (как это происходит в режиме автоматической фиксации)
  • используйте и настройте пул соединений с базой данных, чтобы у вас могло быть несколько потоков, выполняющих операции с базой данных одновременно, без чрезмерной нагрузки на сервер баз данных.
  • помните, что операции с БД в основном связаны с вводом / выводом, поэтому вы, вероятно, можете использовать больше потоков, чем у вас ядер
  • всякий раз, когда это применимо, используйте ExecutorService вместо создания собственных потоков, чтобы вам не приходилось самостоятельно управлять жизненным циклом потоков
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...