Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 JavaExtreme и потоки  [new]
TryCache
Member

Откуда:
Сообщений: 53
Добрый день.

В моей программе есть несколько потоков, для простоты, два. Я использую интерфейс Java Extreme для доступа к данным Cache 2014.1. Согласно документации я создал по одному соединению на каждый из потоков. Если поток №1 пишет данные, а поток №2 читает данные и произойдет такая ситуация, что читающий поток начнет читать тот же узел, в который пишущий поток пишет данные, какие возможны проблемы? Должен ли я явно где-то блокировать что-то? Возможно, завести в потомках разделяемого узла (который в данный момент пишется) какой-то флаг?

И еще, допустим мне нужно записать достаточно большой массив байт в узел. Например, 10 Мбайт. Я разбиваю этот блок на несколько блоков (например, по 3 Мб) и пишу их последовательно. Что произойдет, если читающая программа начнет читать блок данных в момент записи? Насколько я понимаю, операция записи блока в 10 МБайт не будет атомарна, а вот операция записи узла в 3 Мб уже будет атомарной, т.е. пока данные в 3 Мб реально не запишутся целиком читающая программа не "увидит" часть из них. Это так?
22 сен 14, 09:23    [16603330]     Ответить | Цитировать Сообщить модератору
 Re: JavaExtreme и потоки  [new]
TryCache
Member

Откуда:
Сообщений: 53
Тут http://docs.intersystems.com/documentation/cache/20102/pdfs/BLXT.pdf на странице 7 было указано:

eXTreme intraprocess connections are limited to one connection per thread.


А вот тут http://docs.intersystems.com/ens20122/csp/docbook/DocBook.UI.Page.cls?KEY=BXJV_globals#BXJV_globals_connect было указано:

It is important to understand that only one eXTreme Connection instance can exist in a process, and all Connection variables are references to that instance. When the Globals API and other eXTreme APIs are used in the same process, they will share the same underlying connection (see “Using the Globals API with Other eXTreme APIs”).


Так что все-таки per a process, not per a thread

С чем, собственно, я и столкнулся. Как быть, если нужно из разных потоков обращаться: организовывать очереди, использовать блокировки. что-то еще?
22 сен 14, 10:23    [16603502]     Ответить | Цитировать Сообщить модератору
 Re: JavaExtreme и потоки  [new]
EvLaUy
Member

Откуда: Москва
Сообщений: 2278
TryCache,
ну хоть кто-то еще, как оказалось, использует Java eXTreme. Вполне могу понять несколько раздраженный тон Ваших вопросов, сам тоже с этим мучаюсь. К сожалению, досконально ответить на Ваши вопросы пока не могу, если что-нибудь нарою в экспериментах - обязательно поделюсь. Ну и Вы поделИтесь тоже.
22 сен 14, 10:37    [16603556]     Ответить | Цитировать Сообщить модератору
 Re: JavaExtreme и потоки  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1195
TryCache,

Никаких самодельных флагов, только блокировки: флаги - это те же данные, для их использования также нужны блокировки.
22 сен 14, 12:23    [16604044]     Ответить | Цитировать Сообщить модератору
 Re: JavaExtreme и потоки  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3120
Блог
TryCache,

Посмотрите готовый пример многопоточного XEP-приложения - Threads.java.


PS: есть ещё недокументированный метод для задания используемой модели потоков:
ConnectionContext.setOption(ConnectionContext.THREADING_MODEL, ConnectionContext.THREADING_MODEL_THREAD_SPECIFIC);
// или
ConnectionContext.setOption(ConnectionContext.THREADING_MODEL, ConnectionContext.THREADING_MODEL_NON_THREAD_SPECIFIC);
23 сен 14, 14:20    [16610410]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить