|
|
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
YuRockбыла (что касается Firebird) до версии 3.0.Правильно. А в Interbase осталась. С чем работает Док и каких версий - неизвестно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 17:32 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_С чем работает Док и каких версий - неизвестно Загляни в его подпись 20500242 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 17:37 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
wadmanУже предлагал много раз. :( ладно хоть не на асме клепает. нафиг, всегда проще понять и найти ошибку там, годе написал код сам :) _Vasilisk_1. С одним коннектом может работать только один поток 2. Если несколько потоков создают коннекты, то эта процедура должна быть синхронизирована единым мьютексом как-то был разговор про потокобезопасность FB, подробностей не вспомню. Поэтому хотел уточнить, в общих случаях: 1. если я в доп.потоке хочу что-то сделать с таблей (неважно, в основном потоке с ней что-то происходит или нет), мне нужно создать новый коннект? 2. если я хочу с одной и той же таблей сделать что-то (пусть пока будут селекты) из 2 и более параллельных коннектов, мне так же нужно будет создавать новый коннект на каждый поток, чтобы избежать использование мьютексов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 18:32 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Док1. если я в доп.потоке хочу что-то сделать с таблей (неважно, в основном потоке с ней что-то происходит или нет), мне нужно создать новый коннект?Да Док2. если я хочу с одной и той же таблей сделать что-то (пусть пока будут селекты) из 2 и более параллельных коннектов , мне так же нужно будет создавать новый коннект на каждый поток , чтобы избежать использование мьютексов?Я не понял. У тебя два соединения. Какой еще новый коннект на поток? Два простых правила: 1) Каждый поток работает со своим коннектом. 2) До FB 3.0 создание нового коннекта должно было быть синхронизировано Первое правило можно иногда нарушать. Но когда именно - не знаю :)) Потому лучше не нарушать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 18:53 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Насколько я знаю, нельзя одновременно доступаться из разных потоков к коннекту и наборам. Последовательно - можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 19:00 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
makhaon_Vasilisk_, Насколько я знаю, нельзя одновременно доступаться из разных потоков к коннекту и наборам. Последовательно - можно. В тройке вроде уже и одновременно можно*, но только это бессмысленно - там просто сработает внутренний объект синхронизации работы на коннекшен, если не ошибаюсь, т.ч. будет всё равно последовательно, в лучшем случае. *Имеется ввиду работа с ISC-API. Объекты же "компонентов" юзать одновременно в разных потоках нельзя в любом случае по другим причинам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 19:19 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Док> Поэтому хотел уточнить, в общих случаях: C т.з. FB (2.5 и выше) можешь делать что хочешь (коннекты и вызовы), где хочешь (хоть в основном, хоть в доп.потоках) и как хочешь (в любом порядке). Думать нужно лишь о VCL-ной части - чтобы датасеты смогли поделить транзакции и коннекты. _Vasilisk_> Два простых правила: Ну уж тебе-то стыдно должно быть. :) _Vasilisk_> 2) До FB 3.0 До 2.5. В 3.0 на сей счёт ничего не менялось, вроде. Впрочем, могу и ошибаться. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 19:34 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Два простых правила: 1) Каждый поток работает со своим коннектом. 2) До FB 3.0 создание нового коннекта должно было быть синхронизировано Первое правило можно иногда нарушать. Но когда именно - не знаю :)) Потому лучше не нарушать Хм. Получается, я давненько по минному полю гуляю... Не, то есть про коннект на поток - это я знал и делал. А вот про синхронизацию че-та ни сном ни духом. Если не трудно, подскажи, как это делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 04:20 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
_Викторович_Если не трудно, подскажи, как это делать? Сделай отдельный поток только для открытия коннектов. Например, через те же сообщения. Либо открывай в основном потоке, а для дальнейшей работы - отдавай в другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 08:40 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамДо 2.5. В 3.0 на сей счёт ничего не менялось, вроде. Впрочем, могу и ошибаться. http://www.ibase.ru/ibx/#onlogin чуть ниже описано про подключение в многопоточке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 08:49 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
_Викторович_А вот про синхронизацию че-та ни сном ни духом. Аналогично... Ни разу не было и менять не буду. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 09:00 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
wadmanчуть ниже описано про подключение в многопоточке получается, чисто коннект к базе лучше выносить в отдельный поток? Особенно, если таймаут коннекта занимает более 1 мин? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 09:05 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Докwadmanчуть ниже описано про подключение в многопоточке получается, чисто коннект к базе лучше выносить в отдельный поток? Особенно, если таймаут коннекта занимает более 1 мин? Насколько я понял, эта бага всплывает, когда в программе более одного коннекта, т.к. создание подключения не синхронизировано в нутрях клиента. У меня всегда один коннект был, не было подобных проблем ни разу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 09:12 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Докwadmanчуть ниже описано про подключение в многопоточке получается, чисто коннект к базе лучше выносить в отдельный поток? Особенно, если таймаут коннекта занимает более 1 мин? Не знаю, зачем на ibase.ru придумали эту супер-идею с очередью в отдельном потоке для установления коннекшенов, я в таких случаях поступал так: Код: pascal 1. 2. 3. 4. 5. 6. пока это было актуально. А это действительно было актуально - я напарывался. Сейчас, к счастью, НАКОНЕЦ-ТО, я уже поубирал во многих местах эти ужасающие синхронизации на такой долгой операции, как коннект. Вообще, это был ужас. Просто нереальный. Заставлять коннектиться последовательно. Тебе не надо ничего такого, каз у тебя FB3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 10:53 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
YuRockТебе не надо ничего такого, каз у тебя FB3. Да, тут очень важно, чтобы у тебя и клиент был (fbclient/gds32) от FB3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 10:55 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
_Викторович_Хм. Получается, я давненько по минному полю гуляю... Не, то есть про коннект на поток - это я знал и делал. А вот про синхронизацию че-та ни сном ни духом. Везло. Мне тоже долго везло, а потом резко перестало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 10:57 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
wadman> http://www.ibase.ru/ibx/#onlogin wadman> чуть ниже описано про подключение в многопоточке. То ли я не увидел, то ли там ничего про версии FB и многопоток. Все проблемы, которые есть - это в датасетах/потоках запутаться или сделать "однопоточный многопоток". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 15:29 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамТо ли я не увидел, то ли там ничего про версии FB и многопоток. Нужной закладки на странице нет, потому ссылка на ближайшую. Про версии ничего нет, но текст там такой: ibase.ruИногда при подсоединении к БД в созданном thread может возникнуть ошибка на вызове isc_attach_database (собственно на функции, которая и осуществляет соединение к БД при вызове IBDatatase.Connected:=True). В этом случае вынесите открытие соединения в главный thread приложения, а дальнейшие операции с коннектом производите в пределах нужного thread. Судя по дате последнего изменения 09.2014 - речь о версиях до тройки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 15:35 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
У меня есть некоторые сомнения в достоверности этого текста. Лучше таки уточнить, и пусть Дима исправляет, актуализирует и уточняет, если что. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 16:45 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамЛучше таки уточнить, и пусть Дима исправляет, актуализирует и уточняет, если что. наверное, имеет смысл кому-то компетентному (а то ото всех только и слышишь: вроде бы, вроде бы ....) поднять тред, связанный с его сайтом тут, в дельфевой ветке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 16:49 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Док> ото всех только и слышишь: вроде бы, вроде бы Дык это стандартная оговорка, даже от птицеводов - "не должно вроде бы". Начиная с 2.5 синхронизация делается на уровне порта (т.е. библиотеки), поэтому проблем "быть не должно вроде бы". А Дима, может, на что-то наткнулся, либо этот текст висит лет 10 не исправленный (версии и разница между IB/FB там вообще не упомянуты). > поднять тред, связанный с его сайтом тут, в дельфевой ветке. Не вижу большого смысла. В соседнем разделе где-то был, но в основном ему указывают об ошибках и пр. где попало (где речь зайдёт или где обнаружат). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 17:47 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Если получение данных с ФБ идет в одном потоке, а работа с этими данными и/или их визуализация - в другом, возникает следующий вопрос: Откуда взялась уверенность, что компоненты доступа к БД сделаны safe-thread и корректно реализуют "проход" данных сквозь барьер кэша ядра процессора? Надо заглянуть в исходники компонент доступа к БД и убедится в использовании ими команд процессора инвалидации кэшей для ядер процессора, кэширующих область памяти с полученными от ФБ данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 09:42 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
rdb_devОткуда взялась уверенность Из всей ветки я сделал для себя вывод: хочешь что-то делать с данными в доп.потоке, создай в нем коннект - измени данные - убей коннект. Т.е., реализуй логику приложения так, как будто это доп.поток = новый юзер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 11:59 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Док, с потоконебезопасными компонентами только так. Конечно, есть вариант с полной синхронизацией - инвалидацией всего кэша, но это пагубно сказывается на производительности. Не знаю как в Lazarus, но, к примеру, у компонента Borland/Embarcadero TThread есть метод Synchronize(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 12:08 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
rdb_devу компонента Borland/Embarcadero TThread есть метод Synchronize(). , который вообщеиспользовать нельзя категорически, т.к. он как минимум: 1) замораживает очередь сообщений vcl-потока до обработки всех методов, вызванных в Synchronize во всех потоках; 2) Может приводит к существенной (неизвестно, какой, возможно и бесконечной - зависит от обработчика сообщения, находящегося в очереди) задержке перед вызовом метода, но это ладно; 3) может вообще не вызваться, что приведет ко многим интересным последствиям, любое из которых - полный крах всей логики приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 12:45 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39457816&tid=2041189]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 277ms |
| total: | 521ms |

| 0 / 0 |
