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). Приятная задача!

Date: 2007-01-31 07:53 am (UTC)
From: [identity profile] khazzar.livejournal.com
да нет, сам попробую :)

Profile

catpad: (Default)
catpad

October 2022

S M T W T F S
      1
234 5678
9101112131415
16171819202122
23242526272829
3031     

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 1st, 2025 08:53 am
Powered by Dreamwidth Studios