catpad: (Default)
[personal profile] catpad


Для системы реального времени (шанхайской биржи) написал Database Connection Pool со следующими обязательными условиями:

1) Число connections ограничено и меньше числа threads, которые ими пользуются (ну, это понятно), но может динамически меняться. Естественно, что только один thread может пользоваться одним connection в каждый момент времени.
2) No thread starvation - гарантировано, что каждый thread, который запрашивает connection, рано или поздно получит его наравне с другими, даже более проворными threads - это самое важное (для моей задачи) условие.
3) Гарантировано, что в каждый момент времени открыто ровно столько connections, сколько нужно, а все остальные закрыты.
4) Гарантировано минимальное число дорогих операций открытия/закрытия connection, то есть сами threads свои connections никогда не закрывают, а открывают только в случае крайней необходимости. Connection закрывается только тогда, когда им не пользуются в течение некоторого времени.
5) В случае, если в pool'е нет свободного connection, thread, который запросил connection, блокируется только тогда, когда пожелает, а не сразу после того, как он запросил connection. То есть, сразу после запроса этот thread может заняться, чем ему будет угодно, а connection, который он просит, будет тем временем его дожидаться столько, сколько нужно (когда само станет доступным, конечно). Здесь рассчитано на честность каждого thread'а - если никто из них своими connections не воспользуется, то pool рано или поздно просто опустеет. С другой стороны - это же и способ убирать лишние connections из pool'а - запрашивать и не отдавать, учитывая, что каждый connection через некоторое время закроется сам.

Очень хорошо подходит для большой задачи на интервью. Всё умещается примерно в 100 строк (Java). Приятная задача!

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

catpad: (Default)
catpad

May 2026

S M T W T F S
     1 2
3 45 67 89
10111213141516
17181920212223
24252627282930
31      

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 12th, 2026 10:57 am
Powered by Dreamwidth Studios