powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Уточнение о многопоточности
25 сообщений из 27, страница 1 из 2
Уточнение о многопоточности
    #39970606
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть один общий коннект.

В каждом потоке создается своя транзакция и свой TIBSQL.

Будет работать? Или переписывать все на разные коннекты?


С уважением, Vasilisk
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970612
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

не будет. Истинная многопоточность возможна только в разных коннектах.

Если нужны ещё и общие согласованные данные, то это пока только в 4.0, там есть shared snapshot для транзакции
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970614
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Будет работать?

Падать не должно. Но и толку нет.

PS: И, раз уж речь зашла, какое API лучше: асинхронное или многопоточное?
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970615
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Падать не должно.
Т.е. синхронизация в fbclient есть?
Dimitry Sibiryakov
Но и толку нет.
Толк особо не нужен. Из разных потоков выполняются мини-запросы. Если они выстроятся все в очередь, это будет не критично
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970616
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Истинная многопоточность возможна только в разных коннектах.
Истинная многопоточность не нужна. Нужна стабильность работы и уверенность, что я не полезу к общим данным без синхронизации
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970617
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Т.е. синхронизация в fbclient есть?

Да, на уровне коннекта.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970618
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Да, на уровне коннекта.
Спасибо
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970626
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Симонов Денис
Истинная многопоточность возможна только в разных коннектах.
Истинная многопоточность не нужна. Нужна стабильность работы и уверенность, что я не полезу к общим данным без синхронизации


В ibx с этим есть проблемы, поэтому нежелательно лишний раз дёргать ibdatabase из разных потоков.
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970648
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_ Из разных потоков выполняются мини-запросы. Если они выстроятся все в очередь
перефразируя, получается
"многотредовость без многопоточности это как настоящая многопоточность, только без многопоточности".
Ради прикола можно написать такой код. Только его эффективность будет равна нулю - что с тредами, что без, всё равно будет очередь.
Если это попытка освободить gui от зависания во время выполнения запросов - ну, можно.
Или, с прицелом на будущую выдачу своего коннекта каждому треду.
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39970653
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если используете ibx, то почему бы не задействовать пул из ibxFbUtils?
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39971830
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Или, с прицелом на будущую выдачу своего коннекта каждому треду.
Изначально это все работало на Interbase и каждый новый поток получал свой коннект. Потом в очередной версии Borland/Codegear ужесточили лицензионную политику и в одной лицензии стали разрешать не более пяти коннектов. Поэтому пришлось пересматривать многопоточную модель и все свелось к одному коннекту, но потоки так и остались. Сейчас мы мигрировали (наконец) на Firebird и в одном месте программа стала работать странно. Вот и решил уточниться.

А так, конечно, нужно возвращать мультисессионность.
DmSer
почему бы не задействовать пул из ibxFbUtils?
Это что за зверь? Что-то самописное? Идея пула коннектов уже бродит. Думал писать свой велосипед
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39971841
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_ужесточили лицензионную политику и в одной лицензии стали разрешать не более пяти коннектов.
не пяти, а четырех, причем это относится к клиентской лицензии (на сервере), но никаких физических ограничений при этом нет.
Допустим, лицензия на 5 клиентов = 20 коннектов. Хоть с одного компа.
Понятно, что если приложение невозбранно жрет коннекты, то они быстро кончатся для других пользователей.

При переходе на Firebird и возврате "многоконнектной многопоточности" в приложении, нужно учитывать архитектуру сервера.
На классике/суперклассике бесконтрольное открытие коннектов приложениями приводит к пожиранию памяти сервером.
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39971850
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
не пяти, а четырех,
С тобой спорить не буду, но кажется мне, что было таки 5. Или там было 4 на лицензию плюс 1 на сервер. Уже не помню
kdv
это относится к клиентской лицензии (на сервере), но никаких физических ограничений при этом нет. Допустим, лицензия на 5 клиентов = 20 коннектов. Хоть с одного компа.
Это я все знаю
kdv
На классике/суперклассике бесконтрольное открытие коннектов приложениями приводит к пожиранию памяти сервером.
Ну не бесконтрольное. В среднем получится до 10 коннектов. Ну и понятно, что чем больше хотим от сервера, тем больше сервер хочет от нас :)
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39971866
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

DmSer
почему бы не задействовать пул из ibxFbUtils?
Это что за зверь? Что-то самописное? Идея пула коннектов уже бродит. Думал писать свой велосипед

Думаю, что в IBX надо смотреть на IBX.IBConnectionBroker.pas:
http://docwiki.embarcadero.com/Libraries/Rio/en/IBX.IBConnectionBroker.TIBConnectionBroker
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39971872
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
Думаю, что в IBX надо смотреть на IBX.IBConnectionBroker.pas:
Да. Это он и есть. Спасибо.

P.S. А код страшненький
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
function TIBConnectionBroker.GetConnection: TIBDatabase;
var
  gotOne: Boolean;
  OuterLoop: Integer;
  aloop: Integer;
  roundrobin: Integer;
begin
  result := nil;
  gotOne := false;
  for outerloop := 0 to 2 do
  begin
    try
      aloop := 0;
      roundRobin := FConnLast + 1;
      if (roundRobin >= FCurrConnections) then
        roundRobin := 0;
      CS1.BeginWrite;
      try
        repeat
          begin
            begin
              if (FConnPool[roundRobin].ConnStatus < 1) then
              begin
                if (FConnPool[roundRobin].Database.Connected) then
                begin
                  result := FConnPool[roundRobin].Database;
                  FConnPool[roundRobin].ConnStatus := 1;
                  FConnPool[roundRobin].ConnLockTime := now;
                  FConnLast := roundRobin;
                  gotOne := true;
                  DoLog(SIBBrokerGiveOut + IntToStr(roundrobin));
                  break;
                end;
              end
              else
              begin
                inc(aloop);
                inc(roundRobin);
                if (roundRobin >= FCurrConnections) then
                  roundRobin := 0;
              end;
            end;
          end;
        until ((gotOne = true) or (aloop >= FCurrConnections));
      finally
        CS1.EndWrite;
      end;
    except
      ///
    end;

    if (gotOne) then
    begin
      break;
    end
    else
    begin
      CS1.BeginWrite;
      try
        begin // Add new connections to the pool
          if (FCurrConnections < FMaxConns) then
          begin
            try
              CreateConn(FCurrConnections);
              Inc(FCurrConnections);
            except
              on E: Exception do
                DoLog(SIBBrokerUnavailable + e.Message );
            end;
          end;

          sleep(FDelay);
          DoLog(SIBBrokerExhausted + IntToStr(outerloop));
        end;
      finally
        CS1.EndWrite;
      end;
    end; // End of try 10 times loop
  end;
end;

...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39971880
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Он там везде страшненький. Перспективнее смотреть в сторону FireDAC.
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39971950
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Или там было 4 на лицензию плюс 1 на сервер. Уже не помню
не было никаких "плюс" или "пять". Я абсолютно точно говорю - 4 коннекта на юзерскую лицензию.
Да, серверная лицензия включает одну юзерскую (если это не пакет сервер+клиенты), иначе к серверу было бы невозможно подключиться. Но это значит - 4 коннекта (1 юзер).
Если докупить 5 юзерских лицензий, получится 1+5 = 6 лицензий * 4 коннекта = 24 коннекта.
У десктопной лицензии - всегда 2 юзера, т.е. 2х4=8 коннектов.
И т.д. Со мной спорить в этом плане не надо, я 2 года был консультантом Борланда по InterBase. :-) И продаю лицензии InterBase с 1997 по настоящий момент.
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39972175
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
kdv
Или, с прицелом на будущую выдачу своего коннекта каждому треду.
Изначально это все работало на Interbase и каждый новый поток получал свой коннект. Потом в очередной версии Borland/Codegear ужесточили лицензионную политику и в одной лицензии стали разрешать не более пяти коннектов. Поэтому пришлось пересматривать многопоточную модель и все свелось к одному коннекту, но потоки так и остались. Сейчас мы мигрировали (наконец) на Firebird и в одном месте программа стала работать странно. Вот и решил уточниться.

А так, конечно, нужно возвращать мультисессионность.
DmSer
почему бы не задействовать пул из ibxFbUtils?
Это что за зверь? Что-то самописное? Идея пула коннектов уже бродит. Думал писать свой велосипед


ссылка на обсуждение . Исходники на sf.net, также ссылка там есть. На той неделе последний раз коммит делал. Основное преимущество- надёжность. Что с этим у брокера- не в курсе.
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39972353
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Основное преимущество- надёжность.
fbUtils.pas
Код: pascal
1.
2.
3.
{$IFDEF WIN64}
КОМПОНЕНТЫ IBX НЕ МОГУТ РАБОТАТЬ С БД FIREBIRD В 64-РАЗРЯДНОМ ПРИЛОЖЕНИИ!
{$ENDIF}

Дальше не читал. В топку.
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39972379
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
DmSer
Основное преимущество- надёжность.
fbUtils.pas
Код: pascal
1.
2.
3.
{$IFDEF WIN64}
КОМПОНЕНТЫ IBX НЕ МОГУТ РАБОТАТЬ С БД FIREBIRD В 64-РАЗРЯДНОМ ПРИЛОЖЕНИИ!
{$ENDIF}

Дальше не читал. В топку.

А разве это неправда? В 2012 году не работали. Сейчас что изменилось?
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39972384
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
В 2012 году не работали
... потому, что кто-то пытался загрузить библиотеки 32-разрядного сервера?
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39972390
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Сейчас что изменилось?
IBX отлично подтягивает непереименованный 64 битный fbclient и замечательно с ним работает
Basil A. Sidorov
... потому, что кто-то пытался загрузить библиотеки 32-разрядного сервера?
Кстати, так и не понял логику разработчиков, которые оставили имя fbclient.dll для 64 битной версии
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39972400
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_так и не понял логику разработчиков, которые оставили имя fbclient.dll для 64 битной версии

Возможно, они не захотели напрягать рядовых коллег условной компиляцией. В makefile это
особенно неприятно.

Поэтому схема проста: либо ты кладёшь в каталог приложения библиотеку нужной лично ему
разрядности, либо устанавливаешь библиотеку в системный каталог и нужную разрядность
автомагически подсунет система.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39972432
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
DmSer
В 2012 году не работали
... потому, что кто-то пытался загрузить библиотеки 32-разрядного сервера?


Точно не помню, как я проверял в 2012 году, мог и ошибиться.
Получается, если я скопирую fbclient.dll под именем GDS32.dll (или дам команду инсталл клиент) и кину в папку с программой, то IBXксы должны заработать?
...
Рейтинг: 0 / 0
Уточнение о многопоточности
    #39972438
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerскопирую fbclient.dll под именем GDS32.dll
если тебе пофиг на services api. у фбклиента версия либы меньше 6, а по этой версии ибх определяет видимость services api.
instclient.exe как раз превращает фбклиент в правильный гдс32. Правда, не знаю, делает-ли то же самое 64разрядный instclient.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Уточнение о многопоточности
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]