![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIBDatabase - потокобезопасен?
Piter © (2005-10-31 19:06:00)Можно ли к одному TIBDatabase подключать различные TIBQuery, создаваемые в разных потоках?
Zacho (2005-11-01 01:52:00) [1]Piter © (01.11.05 1:16) [9]
"TIBTransaction provides discrete transaction control over a one or more database connections in a database application."
Насколько я понял, "more database connections" - имеется в виду механизм 2PC (two phase commit). Подробно о 2PC можешь найти информацию на http://www.ibase.ru/develop.htm
Zacho (2005-11-01 01:45:00) [2]Piter © (01.11.05 1:13) [8]
То есть, для каждого потока свой TIBDatabase - правильно?
Совершенно верно.
Piter © (01.11.05 1:16) [9]
Народ, немного не в тему - а где почитать про транзакции?
http://www.ibase.ru/devinfo/ibtrans.htm
http://www.ibase.ru/devinfo/ibx.htm
> И также немного непонятно зачем нужен IBSQL, если есть
> IBQuery
Как раз наоборот, TIBQuery нафиг не нужен, он сделан для облегчения перевода старых проектов с BDE на IBX или если предпологается в будущем переводить проект на BDE-like компоненты. А так для всего чего угодно достаточно TIBDataSet и TIBSQL.
Piter (2005-11-01 01:16:00) [3]Народ, немного не в тему - а где почитать про транзакции? Я то я никак не пойму зачем нужен TIBTransaction. Особенно эту фразу:
"TIBTransaction provides discrete transaction control over a one or more database connections in a database application."
И также немного непонятно зачем нужен IBSQL, если есть IBQuery.
Piter (2005-11-01 01:13:00) [4]Zacho © (01.11.05 0:28) [7]
ага, все, понял.
То есть, для каждого потока свой TIBDatabase - правильно?
Zacho (2005-11-01 00:28:00) [5]Piter © (01.11.05 0:11) [6]
Как я это понимаю? Я так понимаю - что в одном процессе нельзя вызывать функции gdi32.dll из разных потоков, верно?
Это соответственно, приводит к выводу:
Piter © (31.10.05 23:53) [4]
Тогда получается из одного процесса вообще нельзя устанавливать больше одного коннекта к базе???
Во-первых, вывод совершенно не верен. Процессы не имееют никакого отношения к кол-ву подключении. Хоть 1000 подключений установи из одного процесса или одного потока.
Во-вторых, из разных потоков вызывать функции gd s32.dll можно, но либо вызовы нужно синхронизировать, либо они должны быть в контексте разных подключений.
Ещё раз и немного более развёрнуто повторю общее правило:
В одном потоке можно работать с произвольным количеством подключений.
С каждым конкретным подключением одновременно можно работать только из одного потока. Если нужно работать с БД в разных потоках, то для разных потоков должны быть отдельные подключения.
Piter (2005-11-01 00:11:00) [6]Johnmen © (01.11.05 0:02) [5]
Процесс<>поток
да я в курсе :)
А что из этого следует?
Утверждается, что GDI32.dll не потокобезопасен.
Как я это понимаю? Я так понимаю - что в одном процессе нельзя вызывать функции gdi32.dll из разных потоков, верно?
Это соответственно, приводит к выводу:
Piter © (31.10.05 23:53) [4]
Тогда получается из одного процесса вообще нельзя устанавливать больше одного коннекта к базе???
Johnmen (2005-11-01 00:02:00) [7]Процесс<>поток
Piter (2005-10-31 23:53:00) [8]Zacho © (31.10.05 23:20) [3]
на каждый поток своё подключение
Ты имеешь в виду, в каждом потоке свой Database и свои Query?
Но как это согласуется с:
gds32.dll (fbclient.dll) не потокобезопасен
?
Тогда получается из одного процесса вообще нельзя устанавливать больше одного коннекта к базе???
Zacho (2005-10-31 23:20:00) [9]gds32.dll (fbclient.dll) не потокобезопасен, т.ч. и IBX и FIBPlus тоже непотокобезопасны. Да и нет никакого смысла использовать запросы в разных потоках через одно подключение, т.к. в контексте одного подключения все запросы всё равно выполняются последовательно. Т.ч. общее правило - на каждый поток своё подключение.
Sergey Masloff (2005-10-31 20:36:00) [10]Нет.
Насчет FIB+ не знаю но есть поводы сомневаться.
Андрей Жук (2005-10-31 20:10:00) [11]Ты вроде бы это спрашивал...
Используй FIB+, там точно потокобезопасно.