Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / 3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта? / 24 сообщений из 24, страница 1 из 1
03.10.2016, 14:13
    #39319632
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
Можно ли в 3.0 делать параллельные вызовы API из разных потоков, использующих 1-о соединение?

Раньше в Embedded 2.5 это работало, а теперь в 3.0 это приводит к бесконечному зависанию при вызове isc_dsql_prepare. В некоторых случая и к Access Violation в Engine12.dll.
...
Рейтинг: 0 / 0
03.10.2016, 14:15
    #39319634
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalov,

никогда это не работало.
один поток - одно подключение
...
Рейтинг: 0 / 0
03.10.2016, 14:17
    #39319637
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
Т.е. о чем здесь говорилось поломали?

kdvВ 2.5 паоявилась только синхронизация вызовов API, которая в результате дает стабильную работу клиента, даже если приложение пытается выполнять вызовы API для одного коннекта из разных тредов.
...
Рейтинг: 0 / 0
03.10.2016, 14:20
    #39319640
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
pastor,

В 2.5 это работало как с Embedded так и через TCP/IP.
Сейчас в 3.0 с Embedded не работает.
...
Рейтинг: 0 / 0
03.10.2016, 14:21
    #39319641
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalov,

ты что-то путаешь.

В 3.0 без изменения конфига Embedded работает как SS, в 2.5 - SC. Поэтому подключение к одной и той же БД из разных процессов (программ) в 3.0 без изменения конфига не возможен, ибо файл БД открывается в эксклюзивном режиме. Надеюсь ты это имел ввиду?
...
Рейтинг: 0 / 0
03.10.2016, 14:25
    #39319646
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalovpastor,

В 2.5 это работало как с Embedded так и через TCP/IP.
Сейчас в 3.0 с Embedded не работает.

ну допустим. Что с того, даже если так можно делать в 2.5, то это не обозначает что нужно. Профита от этого 0, потому как параллельно всё равно в одном коннекте ничего работать не будет. Если хочешь чтобы исправили, то делай воспроизводимый пример того что работало в 2.5 и перестало в 3.0 и в трекер.
...
Рейтинг: 0 / 0
03.10.2016, 14:25
    #39319647
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
Симонов Денис,

Это понятно, спасибо.
Но вопрос касался использования 1-го коннекта из разных потоков.
Тестировал на установленном Classic, при подключении без указания протокола, т.е. использовался embedded (engine12).
...
Рейтинг: 0 / 0
03.10.2016, 14:33
    #39319653
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalovТ.е. о чем здесь говорилось поломали?
нет. Это стало как дверь в одноместный сортир. Раньше двери не было. Но все равно в таком сортире сидеть может только один.
Собственно, параллельного выполнения операций в одном коннекте нет практически ни в одной СУБД, потому что это нафиг никому не надо (или не реализуется из-за особенностей транспорта в коннекте).

Игрища с параллельным доступом в одном коннекте интересны разве что с точки зрения повышения собственного уровня, но не более того. Эти операции все равно остаются сериализованными, т.е. никакой параллельности в одном коннекте не будет.
...
Рейтинг: 0 / 0
03.10.2016, 14:41
    #39319664
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
kdvСобственно, параллельного выполнения операций в одном коннекте нет практически ни в одной СУБД
Никто не говорит о параллельном выполнении (в Oracle, кстати это работает). Пусть они выполняются последовательно, но с синхронизацией на уровне fbclient.dll.

Речь о проблеме зависания всех потоков, использующих 1 коннект.
...
Рейтинг: 0 / 0
03.10.2016, 14:43
    #39319667
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalov,

тесткейс и в трекер
...
Рейтинг: 0 / 0
03.10.2016, 15:07
    #39319692
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalovо параллельном выполнении (в Oracle, кстати это работает)
именно работает, в одном коннекте? хотелось бы подтверждения, ссылкой на доку Оракла. Я там такого пока не нашел.
...
Рейтинг: 0 / 0
03.10.2016, 15:12
    #39319697
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
kdvименно работает, в одном коннекте?
Так же как и в Firebird: полная сериализация вызовов API.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.10.2016, 15:23
    #39319710
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
Dimitry Sibiryakov,

rashid.abzalov утверждает, что прям параллельно из тредов в одном коннекте все работает. Я может не те ключевые слова использую, но ... а, вот, нашел, по 10g

https://docs.oracle.com/cd/B19306_01/appdev.102/b14250/oci09adv.htm

Once spawned, threads run asynchronously with respect to one another. They can access common data elements and make OCI calls in any order. Because of this shared access to data elements, a synchronized mechanism is required to maintain the integrity of data being accessed .

The mechanism to manage data access takes the form of mutexes (mutual exclusivity locks), that is implemented to ensure that no conflicts arise between multiple threads accessing shared internal data that are opaque to users. In OCI, mutexes are granted for each environment handle.

Собственно, не вижу никакой параллельности.

Кстати, в доке на 12g уже по другому написано
http://docs.oracle.com/database/121/LNOCI/oci08sca.htm#LNOCI16587
но тем не менее

Implementing Thread Safety
Pass a value of OCI_ENV_NO_MUTEX for the mode of OCIEnvNlsCreate(). The application must set mutual exclusion locks (mutex) for OCI calls made on the same environment handle. This has the advantage that the mutex scheme can be optimized to the application design. The programmer must also ensure that only one OCI call is in process on the environment handle connection at any given time.

Pass a value of OCI_DEFAULT for the mode of OCIEnvNlsCreate(). The OCI library automatically gets a mutex on every OCI call on the same environment handle.


т.е. один хрен - по умолчанию синхронизация через мютексы, или человек сам должен эту синхронизацию делать.
...
Рейтинг: 0 / 0
03.10.2016, 15:29
    #39319713
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
kdv,

Да, значит я ошибался ...

The bulk of processing of an OCI call happens on the server, so if two threads using OCI calls go to the same connection, then one them could be blocked while the other finishes processing at the server.
...
Рейтинг: 0 / 0
03.10.2016, 15:48
    #39319736
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
kdvт.е. один хрен - по умолчанию синхронизация через мютексы, или человек сам должен эту
синхронизацию делать.

Ну так я так и сказал. Единственное отличие от Firebird это добровольная возможность
отключить внутреннюю синхронизацию в пользу своей собственной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.10.2016, 15:59
    #39319756
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalovТ.е. о чем здесь говорилось поломали?

kdvВ 2.5 паоявилась только синхронизация вызовов API, которая в результате дает стабильную работу клиента, даже если приложение пытается выполнять вызовы API для одного коннекта из разных тредов.


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

у нас в исходниках был свой мьютекс, в фибах свой, с 2.5 появился в fbclient.

работа с данными всегда была однопоточной.
...
Рейтинг: 0 / 0
04.10.2016, 11:29
    #39320163
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
Оправил в трекер .
...
Рейтинг: 0 / 0
04.10.2016, 13:27
    #39320253
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalov,

один уточняющий вопрос. А у тебя сервис 3.0 при этом запущен? Потому как с 2.5 тут сравнивать немного не корректно. Там embedded отдельный дистрибутив.
...
Рейтинг: 0 / 0
04.10.2016, 14:39
    #39320295
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
Симонов ДенисА у тебя сервис 3.0 при этом запущен?
- В примере из трекера - без установленного сервера, приложение лежит рядом с распакованным "Zip kit for manual/custom installs".
Считай embedded.
- В примере из изначального сообщения этой ветки - с установленным сервером, но при подключении в режиме embedded.
Так, что никакой разницы нет.

Симонов ДенисПотому как с 2.5 тут сравнивать немного не корректно. Там embedded отдельный дистрибутив.
В свете использования "Zip kit for manual/custom installs" - думаю, что корректно.
...
Рейтинг: 0 / 0
04.10.2016, 15:04
    #39320322
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalov,

да нет. Как раз таки не совсем. Дело в том что как только к твоей БД подключится что-то через нормальный SS сервер, то через embedded к той же БД уже не подрубиться.
...
Рейтинг: 0 / 0
04.10.2016, 15:41
    #39320356
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
Симонов ДенисДело в том что как только к твоей БД подключится что-то через нормальный SS сервер, то через embedded к той же БД уже не подрубиться.

Да, это известно и хорошо описано в документации. И это еще один аргумент в пользу бессмысленного использования Embedded сервера одновременно с полноценно установленным.

Но не понял, как ваше замечание соотноситься с изначальной проблемой?
...
Рейтинг: 0 / 0
04.10.2016, 15:46
    #39320368
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalov,

Коннект-то 1, а потоков использующих его много.
Так, что зависание из-за невозможности подсоединится 2-м коннектом - исключается.
...
Рейтинг: 0 / 0
04.10.2016, 15:49
    #39320374
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
rashid.abzalov,

погаси сервис и проверь ещё раз
...
Рейтинг: 0 / 0
04.10.2016, 16:05
    #39320388
rashid.abzalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта?
Симонов Дениспогаси сервис и проверь ещё раз

Погасил, проверил - результат аналогичный.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / 3.0 Embedded (Engine12) thread safe в рамках 1-го коннекта? / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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