Программистское
Jan. 31st, 2007 11:45 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Для системы реального времени (шанхайской биржи) написал 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). Приятная задача!
no subject
Date: 2007-01-31 07:03 am (UTC)no subject
Date: 2007-01-31 07:14 am (UTC)Нужны намёки на решение ?
no subject
Date: 2007-01-31 07:53 am (UTC)no subject
Date: 2007-01-31 08:01 am (UTC)http://khazzar.livejournal.com/151729.html
no subject
Date: 2007-01-31 09:29 am (UTC)no subject
Date: 2007-01-31 09:18 am (UTC)no subject
Date: 2007-01-31 09:33 am (UTC)В моём случае thread не является Observer'ом, а наоборот сам инициирует получение connection тогда, когда ему нужно.
no subject
Date: 2007-01-31 10:19 am (UTC)no subject
Date: 2007-03-17 04:12 pm (UTC)Либо "Connection закрывается только тогда, когда им не пользуются в течение некоторого времени" и в течении этого "некоторого времени" это соединение будет бесхозным, либо "в каждый момент времени открыто ровно столько connections, сколько нужно, а все остальные закрыты" и бесхозных соединений не бывает.