powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: коннект в потоке
25 сообщений из 125, страница 2 из 5
Lazarus: коннект в потоке
    #39457593
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockбыла (что касается Firebird) до версии 3.0.Правильно. А в Interbase осталась. С чем работает Док и каких версий - неизвестно
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457602
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_С чем работает Док и каких версий - неизвестно
Загляни в его подпись 20500242
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457642
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanУже предлагал много раз. :( ладно хоть не на асме клепает.
нафиг, всегда проще понять и найти ошибку там, годе написал код сам :)

_Vasilisk_1. С одним коннектом может работать только один поток
2. Если несколько потоков создают коннекты, то эта процедура должна быть синхронизирована единым мьютексом
как-то был разговор про потокобезопасность FB, подробностей не вспомню. Поэтому хотел уточнить, в общих случаях:
1. если я в доп.потоке хочу что-то сделать с таблей (неважно, в основном потоке с ней что-то происходит или нет), мне нужно создать новый коннект?
2. если я хочу с одной и той же таблей сделать что-то (пусть пока будут селекты) из 2 и более параллельных коннектов, мне так же нужно будет создавать новый коннект на каждый поток, чтобы избежать использование мьютексов?
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457649
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док1. если я в доп.потоке хочу что-то сделать с таблей (неважно, в основном потоке с ней что-то происходит или нет), мне нужно создать новый коннект?Да
Док2. если я хочу с одной и той же таблей сделать что-то (пусть пока будут селекты) из 2 и более параллельных коннектов , мне так же нужно будет создавать новый коннект на каждый поток , чтобы избежать использование мьютексов?Я не понял. У тебя два соединения. Какой еще новый коннект на поток?

Два простых правила:
1) Каждый поток работает со своим коннектом.
2) До FB 3.0 создание нового коннекта должно было быть синхронизировано

Первое правило можно иногда нарушать. Но когда именно - не знаю :)) Потому лучше не нарушать
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457652
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Насколько я знаю, нельзя одновременно доступаться из разных потоков к коннекту и наборам. Последовательно - можно.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457657
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon_Vasilisk_,

Насколько я знаю, нельзя одновременно доступаться из разных потоков к коннекту и наборам. Последовательно - можно.
В тройке вроде уже и одновременно можно*, но только это бессмысленно - там просто сработает внутренний объект синхронизации работы на коннекшен, если не ошибаюсь, т.ч. будет всё равно последовательно, в лучшем случае.

*Имеется ввиду работа с ISC-API. Объекты же "компонентов" юзать одновременно в разных потоках нельзя в любом случае по другим причинам.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457659
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док> Поэтому хотел уточнить, в общих случаях:

C т.з. FB (2.5 и выше) можешь делать что хочешь
(коннекты и вызовы), где хочешь (хоть в основном,
хоть в доп.потоках) и как хочешь (в любом порядке).
Думать нужно лишь о VCL-ной части - чтобы датасеты
смогли поделить транзакции и коннекты.

_Vasilisk_> Два простых правила:

Ну уж тебе-то стыдно должно быть. :)

_Vasilisk_> 2) До FB 3.0

До 2.5. В 3.0 на сей счёт ничего не менялось, вроде.
Впрочем, могу и ошибаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457714
_Vasilisk_Два простых правила:

1) Каждый поток работает со своим коннектом.
2) До FB 3.0 создание нового коннекта должно было быть синхронизировано

Первое правило можно иногда нарушать. Но когда именно - не знаю :)) Потому лучше не нарушать
Хм. Получается, я давненько по минному полю гуляю... Не, то есть про коннект на поток - это я знал и делал.
А вот про синхронизацию че-та ни сном ни духом. Если не трудно, подскажи, как это делать?
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457746
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Викторович_Если не трудно, подскажи, как это делать?
Сделай отдельный поток только для открытия коннектов. Например, через те же сообщения.
Либо открывай в основном потоке, а для дальнейшей работы - отдавай в другой.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457749
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамДо 2.5. В 3.0 на сей счёт ничего не менялось, вроде.
Впрочем, могу и ошибаться.

http://www.ibase.ru/ibx/#onlogin чуть ниже описано про подключение в многопоточке.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457752
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Викторович_А вот про синхронизацию че-та ни сном ни духом.
Аналогично... Ни разу не было и менять не буду. :)
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457755
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanчуть ниже описано про подключение в многопоточке
получается, чисто коннект к базе лучше выносить в отдельный поток? Особенно, если таймаут коннекта занимает более 1 мин?
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457757
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докwadmanчуть ниже описано про подключение в многопоточке
получается, чисто коннект к базе лучше выносить в отдельный поток? Особенно, если таймаут коннекта занимает более 1 мин?
Насколько я понял, эта бага всплывает, когда в программе более одного коннекта, т.к. создание подключения не синхронизировано в нутрях клиента.
У меня всегда один коннект был, не было подобных проблем ни разу.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457816
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докwadmanчуть ниже описано про подключение в многопоточке
получается, чисто коннект к базе лучше выносить в отдельный поток? Особенно, если таймаут коннекта занимает более 1 мин?
Не знаю, зачем на ibase.ru придумали эту супер-идею с очередью в отдельном потоке для установления коннекшенов, я в таких случаях поступал так:
Код: pascal
1.
2.
3.
4.
5.
6.
EnterCriticalSection( DB_CONNECT_CS );
try
  db.Connected := True;
finally
  LeaveCriticalSection( DB_CONNECT_CS );
end;


пока это было актуально. А это действительно было актуально - я напарывался.

Сейчас, к счастью, НАКОНЕЦ-ТО, я уже поубирал во многих местах эти ужасающие синхронизации на такой долгой операции, как коннект.
Вообще, это был ужас. Просто нереальный. Заставлять коннектиться последовательно.

Тебе не надо ничего такого, каз у тебя FB3.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457817
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockТебе не надо ничего такого, каз у тебя FB3.
Да, тут очень важно, чтобы у тебя и клиент был (fbclient/gds32) от FB3.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39457819
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Викторович_Хм. Получается, я давненько по минному полю гуляю... Не, то есть про коннект на поток - это я знал и делал.
А вот про синхронизацию че-та ни сном ни духом.
Везло. Мне тоже долго везло, а потом резко перестало.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458192
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman> http://www.ibase.ru/ibx/#onlogin
wadman> чуть ниже описано про подключение в многопоточке.

То ли я не увидел, то ли там ничего про версии FB и многопоток.
Все проблемы, которые есть - это в датасетах/потоках запутаться
или сделать "однопоточный многопоток".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458200
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТо ли я не увидел, то ли там ничего про версии FB и многопоток.
Нужной закладки на странице нет, потому ссылка на ближайшую.
Про версии ничего нет, но текст там такой:

ibase.ruИногда при подсоединении к БД в созданном thread может возникнуть ошибка на вызове isc_attach_database (собственно на функции, которая и осуществляет соединение к БД при вызове IBDatatase.Connected:=True). В этом случае вынесите открытие соединения в главный thread приложения, а дальнейшие операции с коннектом производите в пределах нужного thread.

Судя по дате последнего изменения 09.2014 - речь о версиях до тройки.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458279
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть некоторые сомнения в достоверности этого текста.
Лучше таки уточнить, и пусть Дима исправляет, актуализирует
и уточняет, если что.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458285
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЛучше таки уточнить, и пусть Дима исправляет, актуализирует
и уточняет, если что.
наверное, имеет смысл кому-то компетентному (а то ото всех только и слышишь: вроде бы, вроде бы ....) поднять тред, связанный с его сайтом тут, в дельфевой ветке.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458354
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док> ото всех только и слышишь: вроде бы, вроде бы

Дык это стандартная оговорка, даже от птицеводов -
"не должно вроде бы". Начиная с 2.5 синхронизация
делается на уровне порта (т.е. библиотеки), поэтому
проблем "быть не должно вроде бы". А Дима, может,
на что-то наткнулся, либо этот текст висит лет 10 не
исправленный (версии и разница между IB/FB там
вообще не упомянуты).

> поднять тред, связанный с его сайтом тут, в дельфевой ветке.

Не вижу большого смысла. В соседнем разделе где-то
был, но в основном ему указывают об ошибках и пр.
где попало (где речь зайдёт или где обнаружат).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458593
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если получение данных с ФБ идет в одном потоке, а работа с этими данными и/или их визуализация - в другом, возникает следующий вопрос: Откуда взялась уверенность, что компоненты доступа к БД сделаны safe-thread и корректно реализуют "проход" данных сквозь барьер кэша ядра процессора? Надо заглянуть в исходники компонент доступа к БД и убедится в использовании ими команд процессора инвалидации кэшей для ядер процессора, кэширующих область памяти с полученными от ФБ данными.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458735
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devОткуда взялась уверенность
Из всей ветки я сделал для себя вывод: хочешь что-то делать с данными в доп.потоке, создай в нем коннект - измени данные - убей коннект. Т.е., реализуй логику приложения так, как будто это доп.поток = новый юзер.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458744
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док, с потоконебезопасными компонентами только так. Конечно, есть вариант с полной синхронизацией - инвалидацией всего кэша, но это пагубно сказывается на производительности. Не знаю как в Lazarus, но, к примеру, у компонента Borland/Embarcadero TThread есть метод Synchronize().
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39458796
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devу компонента Borland/Embarcadero TThread есть метод Synchronize().
, который вообщеиспользовать нельзя категорически, т.к. он как минимум:
1) замораживает очередь сообщений vcl-потока до обработки всех методов, вызванных в Synchronize во всех потоках;
2) Может приводит к существенной (неизвестно, какой, возможно и бесконечной - зависит от обработчика сообщения, находящегося в очереди) задержке перед вызовом метода, но это ладно;
3) может вообще не вызваться, что приведет ко многим интересным последствиям, любое из которых - полный крах всей логики приложения.
...
Рейтинг: 0 / 0
25 сообщений из 125, страница 2 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: коннект в потоке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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