Есть ли причина заблокировать очередь? - PullRequest
0 голосов
/ 21 мая 2018

Мне просто интересно, будет ли какая-то причина, по которой я мог бы заблокировать очередь.Я работаю над приложением, которое имеет несколько потоков, которые читают и записывают в базу данных.Чтобы уменьшить трафик, я хочу уменьшить количество обращений к этой базе данных в любой момент (я знаю, что многие базы данных уже могут обрабатывать некоторый трафик).Имеет ли какой-либо смысл создавать очередь для запросов на чтение / запись, и только запрос сверху выполняется, а затем защищать команды push и pop очереди с помощью блокировки?Достаточно ли блокировки для каждого вызова чтения / записи?Разве блокировка не реализована ОС как «очередь»?Может ли размер этой «очереди» быть проблемой или есть какая-то другая причина, по которой я бы не использовал блокировку сам по себе?Спасибо!

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете ограничить количество потоков, которые участвуют в запросах к базе данных, или, если это невозможно из-за характера вашего приложения, вы можете использовать более детальный подход для ограничения доступа к общему ресурсу.В python вы можете использовать встроенные объекты семафоров для синхронизации между потоками.Для синхронизации между процессами (или между потоками) вы должны использовать posix_ipc .Это зависит от модели выполнения вашей службы.

Большинству клиентов баз данных не требуется регулирование на уровне приложения.В типичной системе соединения с базой данных будут объединяться, и менеджер соединений будет отвечать за получение доступного соединения.Внутренне это обычно включает какую-то очередь с тайм-аутами, чтобы предотвратить ожидание бесконечно.Затем сама база данных будет обрабатывать планирование отдельных операций, выполняемых каждым соединением.

Однако семафор является примитивом сигнализации, который может использоваться для ограничения числа одновременных операций: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html

Задачи также могут быть смоделированы как проблема производитель-потребитель , которая включает общую очередь, однако вам придется иметь дело с дополнительной сложностью управления потоками-потребителями в дополнение к производителям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...