|
JavaExtreme и потоки
|
|||
---|---|---|---|
#18+
Добрый день. В моей программе есть несколько потоков, для простоты, два. Я использую интерфейс Java Extreme для доступа к данным Cache 2014.1. Согласно документации я создал по одному соединению на каждый из потоков. Если поток №1 пишет данные, а поток №2 читает данные и произойдет такая ситуация, что читающий поток начнет читать тот же узел, в который пишущий поток пишет данные, какие возможны проблемы? Должен ли я явно где-то блокировать что-то? Возможно, завести в потомках разделяемого узла (который в данный момент пишется) какой-то флаг? И еще, допустим мне нужно записать достаточно большой массив байт в узел. Например, 10 Мбайт. Я разбиваю этот блок на несколько блоков (например, по 3 Мб) и пишу их последовательно. Что произойдет, если читающая программа начнет читать блок данных в момент записи? Насколько я понимаю, операция записи блока в 10 МБайт не будет атомарна, а вот операция записи узла в 3 Мб уже будет атомарной, т.е. пока данные в 3 Мб реально не запишутся целиком читающая программа не "увидит" часть из них. Это так? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2014, 09:23 |
|
JavaExtreme и потоки
|
|||
---|---|---|---|
#18+
Тут 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.09.2014, 10:23 |
|
JavaExtreme и потоки
|
|||
---|---|---|---|
#18+
TryCache, ну хоть кто-то еще, как оказалось, использует Java eXTreme. Вполне могу понять несколько раздраженный тон Ваших вопросов, сам тоже с этим мучаюсь. К сожалению, досконально ответить на Ваши вопросы пока не могу, если что-нибудь нарою в экспериментах - обязательно поделюсь. Ну и Вы поделИтесь тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2014, 10:37 |
|
JavaExtreme и потоки
|
|||
---|---|---|---|
#18+
TryCache, Никаких самодельных флагов, только блокировки: флаги - это те же данные, для их использования также нужны блокировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2014, 12:23 |
|
JavaExtreme и потоки
|
|||
---|---|---|---|
#18+
TryCache , Посмотрите готовый пример многопоточного XEP-приложения - Threads.java . Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2014, 14:20 |
|
|
start [/forum/topic.php?fid=39&fpage=19&tid=1556815]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 387ms |
0 / 0 |