Skip to content

Commit d75f3d4

Browse files
nixel2007claude
andcommitted
style: оформление по стандарту, описания классов над конструкторами
Описания классов `ПулСоединенийСБД` и `СоединениеСБД` перенесены из шапки файла над `ПриСозданииОбъекта`: большая шапка с текстом уместна у модуля, а у класса описание принадлежит конструктору. Заголовки конструкторов слились с перенесенным текстом, дублирующая первая строка убрана. Прочее оформление: области `#Область` в `КонтекстИсполнения`, пустые строки между объявлениями переменных, `@internal` без обертки BSLLS, параметры конструктора менеджера без удвоенных первых букв. Описание параметра `РазмерПулаСоединений` заодно приведено в соответствие с поведением - ожидание ограничено по времени, - и то же описание обновлено в `docs/МенеджерСущностей.md`, который его зеркалит. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AGG5hA6ksvzxJcdWASuc35
1 parent 01298ab commit d75f3d4

6 files changed

Lines changed: 89 additions & 75 deletions

docs/МенеджерСущностей.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@
88
// Параметры:
99
// ТипКоннектора - Тип - Тип класса, реализующего интерфейс Коннектор.
1010
// СтрокаСоединения - Строка - Строка соединения к БД, к которой подключается коннектор.
11-
// ППараметрыКоннектора - Массив - Массив дополнительных параметров коннектора. Содержимое произвольное.
12-
// РРазмерПулаСоединений - Число - Предел одновременно живущих соединений, то есть предел
13-
// параллельной работы с БД: когда все заняты, следующий контекст ждет освобождения. Нулевой
14-
// размер снимает предел, но постоянно живущих соединений не держит - каждое обращение к БД
15-
// открывает свое соединение и закрывает его по завершении.
11+
// ПараметрыКоннектора - Массив - Массив дополнительных параметров коннектора. Содержимое произвольное.
12+
// РазмерПулаСоединений - Число - Предел параллельной работы с БД: когда все места заняты,
13+
// следующий контекст ждет освобождения, но не дольше предела ожидания - иначе получает ошибку.
14+
// Нулевой размер снимает предел, но постоянно живущих соединений не держит - каждое обращение
15+
// к БД открывает свое соединение и закрывает его по завершении.
1616
//
1717
Процедура ПриСозданииОбъекта(
1818
Знач ТипКоннектора,
1919
Знач СтрокаСоединения = "",
20-
Знач ППараметрыКоннектора = Неопределено,
21-
Знач РРазмерПулаСоединений = 10
20+
Знач ПараметрыКоннектора = Неопределено,
21+
Знач РазмерПулаСоединений = 10
2222
)
2323
```
2424

src/internal/concurrent/Модули/КонтекстИсполнения.os

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,25 @@
88
// - код, запущенный в потоках в обход "ФоновыеЗадания", между собой не различается;
99
// - "ФоновыеЗадания.Очистить()" очищает список заданий, после чего работающее задание
1010
// перестает опознаваться и сливается с кодом вне заданий.
11-
//
11+
1212
// Строка - Ключ контекста, в котором выполняется код вне фоновых заданий.
1313
Перем КлючВнеФоновогоЗадания;
14+
1415
// Число - Сколько раз повторяется обращение к списку заданий, сорванное параллельным изменением
1516
// списка.
1617
Перем ПределПовторов;
18+
1719
// Число - Пауза между повторами в миллисекундах.
1820
Перем ПаузаПовтора;
21+
1922
// Действие - Обращение к движку за текущим заданием.
2023
Перем ОбращениеЗаТекущимЗаданием;
24+
2125
// Действие - Обращение к движку за списком заданий.
2226
Перем ОбращениеЗаВсемиЗаданиями;
2327

28+
#Область ПрограммныйИнтерфейс
29+
2430
// Возвращает ключ текущего контекста исполнения.
2531
//
2632
// Возвращаемое значение:
@@ -67,9 +73,12 @@
6773

6874
КонецФункции
6975

70-
// BSLLS:UsingServiceTag-off
76+
#КонецОбласти
77+
78+
#Область СлужебныйПрограммныйИнтерфейс
79+
7180
// @internal
72-
// BSLLS:UsingServiceTag-on
81+
//
7382
// Для служебного пользования.
7483
//
7584
// Выполняет обращение к списку фоновых заданий, повторяя его при срыве перебора.
@@ -105,48 +114,58 @@
105114

106115
КонецФункции
107116

108-
// Возвращает текущее фоновое задание.
117+
// Обращается к движку за текущим заданием. Вызывается только через ВыполнитьСПовтором.
109118
//
110119
// Возвращаемое значение:
111120
// ФоновоеЗадание - Задание, в котором выполняется код.
112121
// Неопределено - Код выполняется вне фоновых заданий.
113122
//
114-
Функция ТекущееЗадание()
115-
Возврат ВыполнитьСПовтором(ОбращениеЗаТекущимЗаданием);
123+
Функция ПолучитьТекущееЗадание() Экспорт
124+
Возврат ФоновыеЗадания.ПолучитьТекущее();
116125
КонецФункции
117126

118-
// Возвращает список известных менеджеру фоновых заданий.
127+
// Обращается к движку за списком заданий. Вызывается только через ВыполнитьСПовтором.
119128
//
120129
// Возвращаемое значение:
121130
// Массив - Фоновые задания.
122131
//
123-
Функция ВсеЗадания()
124-
Возврат ВыполнитьСПовтором(ОбращениеЗаВсемиЗаданиями);
132+
Функция ПолучитьВсеЗадания() Экспорт
133+
Возврат ФоновыеЗадания.ПолучитьФоновыеЗадания();
125134
КонецФункции
126135

127-
// Обращается к движку за текущим заданием. Вызывается только через ВыполнитьСПовтором.
136+
#КонецОбласти
137+
138+
#Область СлужебныеПроцедурыИФункции
139+
140+
// Возвращает текущее фоновое задание.
128141
//
129142
// Возвращаемое значение:
130143
// ФоновоеЗадание - Задание, в котором выполняется код.
131144
// Неопределено - Код выполняется вне фоновых заданий.
132145
//
133-
Функция ПолучитьТекущееЗадание() Экспорт
134-
Возврат ФоновыеЗадания.ПолучитьТекущее();
146+
Функция ТекущееЗадание()
147+
Возврат ВыполнитьСПовтором(ОбращениеЗаТекущимЗаданием);
135148
КонецФункции
136149

137-
// Обращается к движку за списком заданий. Вызывается только через ВыполнитьСПовтором.
150+
// Возвращает список известных менеджеру фоновых заданий.
138151
//
139152
// Возвращаемое значение:
140153
// Массив - Фоновые задания.
141154
//
142-
Функция ПолучитьВсеЗадания() Экспорт
143-
Возврат ФоновыеЗадания.ПолучитьФоновыеЗадания();
155+
Функция ВсеЗадания()
156+
Возврат ВыполнитьСПовтором(ОбращениеЗаВсемиЗаданиями);
144157
КонецФункции
145158

159+
#КонецОбласти
160+
161+
#Область Инициализация
162+
146163
КлючВнеФоновогоЗадания = "*";
147164
ПределПовторов = 100;
148165
ПаузаПовтора = 1;
149166

150167
// Обращения строятся один раз: они на пути каждого захвата соединения.
151168
ОбращениеЗаТекущимЗаданием = Новый Действие(ЭтотОбъект, "ПолучитьТекущееЗадание");
152169
ОбращениеЗаВсемиЗаданиями = Новый Действие(ЭтотОбъект, "ПолучитьВсеЗадания");
170+
171+
#КонецОбласти

src/internal/Классы/ПулСоединенийСБД.os

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,3 @@
1-
// Пул соединений с базой данных.
2-
//
3-
// Через пул идут все обращения к БД. Соединение выдается контексту исполнения на время операции
4-
// или транзакции и не разделяется с другими контекстами: у драйверов СУБД соединение не
5-
// потокобезопасно, и параллельные запросы по одному соединению рвут протокол обмена.
6-
//
7-
// Захват реентерабельный. Операция внутри транзакции получает то же соединение, что и сама
8-
// транзакция, поэтому попадает в нее, а не идет мимо. Соединение возвращается в пул, когда
9-
// контекст освободил его столько же раз, сколько занимал.
10-
//
11-
// Размер пула - это предел одновременно живущих соединений. Когда все заняты, контекст встает в
12-
// очередь ожидающих, и освобожденное соединение достается тому, кто ждет дольше всех. Нулевой
13-
// размер снимает предел и отключает постоянно живущие соединения: каждый захват открывает
14-
// соединение, каждое освобождение его закрывает, ждать при таком размере некого.
15-
//
16-
// Ожидание в очереди ограничено по времени: не дождавшийся контекст получает ошибку, а не висит
17-
// бесконечно. Соединение мог не освободить живой контекст, а у живого пул его не отбирает.
18-
//
19-
// Свободные соединения лежат в приоритетной очереди: первым выдается то, которое вернули
20-
// последним. Так рабочий набор соединений остается малым, а простаивающие стареют.
21-
//
22-
// Пул разделяется всеми потоками, поэтому его состояние защищено блокировкой чтения-записи.
23-
//
241
#Использовать "../concurrent"
252

263
#Использовать collectionos
@@ -63,7 +40,28 @@
6340
// Массив - Дополнительные параметры коннекторов пула.
6441
Перем ПараметрыКоннектора;
6542

66-
// Создает пул с заданным пределом одновременно живущих соединений.
43+
// Пул соединений с базой данных.
44+
//
45+
// Через пул идут все обращения к БД. Соединение выдается контексту исполнения на время операции
46+
// или транзакции и не разделяется с другими контекстами: у драйверов СУБД соединение не
47+
// потокобезопасно, и параллельные запросы по одному соединению рвут протокол обмена.
48+
//
49+
// Захват реентерабельный. Операция внутри транзакции получает то же соединение, что и сама
50+
// транзакция, поэтому попадает в нее, а не идет мимо. Соединение возвращается в пул, когда
51+
// контекст освободил его столько же раз, сколько занимал.
52+
//
53+
// Размер пула - это предел параллельной работы с БД. Когда все места заняты, контекст встает в
54+
// очередь ожидающих, и освобожденное соединение достается тому, кто ждет дольше всех. Нулевой
55+
// размер снимает предел и отключает постоянно живущие соединения: каждый захват открывает
56+
// соединение, каждое освобождение его закрывает, ждать при таком размере некого.
57+
//
58+
// Ожидание в очереди ограничено по времени: не дождавшийся контекст получает ошибку, а не висит
59+
// бесконечно. Соединение мог не освободить живой контекст, а у живого пул его не отбирает.
60+
//
61+
// Свободные соединения лежат в приоритетной очереди: первым выдается то, которое вернули
62+
// последним. Так рабочий набор соединений остается малым, а простаивающие стареют.
63+
//
64+
// Пул разделяется всеми потоками, поэтому его состояние защищено блокировкой чтения-записи.
6765
//
6866
// Параметры:
6967
// ПРазмерПула - Число - Предел одновременно живущих соединений. Ноль снимает предел и отключает

src/internal/Классы/СоединениеСБД.os

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,3 @@
1-
// Соединение с базой данных, выданное из пула соединений.
2-
//
3-
// Содержит собственный экземпляр коннектора и состояние транзакции. Соединение выдается одному
4-
// контексту исполнения и не разделяется: именно поэтому транзакция одного фонового задания не
5-
// может быть зафиксирована или отменена другим.
6-
//
7-
// Создается пулом соединений, напрямую конструировать не следует.
8-
//
9-
101
// АбстрактныйКоннектор - Коннектор, которым выполняются операции этого соединения.
112
Перем Коннектор;
123
// Булево - Признак начатой и еще не завершенной транзакции.
@@ -17,7 +8,14 @@
178
// соединение выдать следующим.
189
Перем МоментВозврата;
1910

20-
// Открывает соединение с базой данных.
11+
// Соединение с базой данных, выданное из пула соединений.
12+
//
13+
// Содержит собственный экземпляр коннектора и состояние транзакции. Соединение выдается одному
14+
// контексту исполнения и не разделяется: именно поэтому транзакция одного фонового задания не
15+
// может быть зафиксирована или отменена другим.
16+
//
17+
// Создается пулом соединений, напрямую конструировать не следует. Конструктор открывает
18+
// соединение с базой данных.
2119
//
2220
// Параметры:
2321
// ТипКоннектора - Тип - Тип класса, реализующего интерфейс коннектора.

0 commit comments

Comments
 (0)