К слову о поточных операциях с базой данных

Dragokas

Добрая душа
Сообщения
229
Реакции
213
К слову о поточных операциях с базой данных (в формате вопрос-ответ)
Спасибо за предоставление инфы Kruzya.

aleeexxx написал(а):
Можете ли вы добавить советы о много-поточных функциях для SQL
Там нет так называемых много-поточных функций.

Существуют только:
  • не-поточные - выполняются в том же потоке, что и плагины SM, таким образом каждый запрос к БД приводит к ожиданию ответа и остановке выполнения операций в других плагинах на протяжении этого времени.
  • поточные - эти выполняют запросы к БД в другом, втором потоке; когда вы выполняете ещё один запрос параллельно, новые потоки больше не создаются, запрос становится в очередь в тот же самый второй поток.

aleeexxx написал(а):
Я только недавно узнал, что старые функции могут блокировать основной поток, а новый синтаксис уже выполняет в много-поточной манере.
Поправьте меня, если я не прав!

Не все из них.
Некоторые из функций методмапа Database всё ещё указывают на старые не-поточные функции в данный момент.

Пример: Database.SetCharset() - это просто алиас SQL_SetCharset, см. исходник.

Но есть и некоторые исключения.
Например: Database.Escape() - даже несмотря на то, что согласно исходнику, он обращается к хендлу БД, при этом внешний запрос не выполняется. Вместо этого, экранирование выполняет сам клиент, основываясь на предварительно за-кешированной кодировке соединения.

Дополнительную инфу можно получить в этом руководстве от R1KO.
А также будет полезным почитать там комментарии.
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #2
поточные - эти выполняют запросы к БД в другом, втором потоке; когда вы выполняете ещё один запрос параллельно, новые потоки больше не создаются, запрос становится в очередь в тот же самый второй поток.
Важно отметить, что SourceMod переиспользует один поток под все плагины. Если какой-то условный SourceBans добавит в очередь на выполнение тяжёлый запрос (поиск бана), то все остальные плагины будут ждать, пока он не выполнится, потому что SB сразу вешает "максимальный" приоритет на свой запрос.
 
Сверху Снизу