|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
есть сервлет в нем вызывается метод A из из класса AA в методе А есть такое вывод сообщения вызов метода В из класса ВВ вывод сообщения метод В synchronized в методе В идёт работа с железом , работать может только один "метод", работа идёт 20сек если одновременно к сервлету обращаются 2 клиента то происходит следующее первому клиенту оправляется сообщение, вызывается метод В, отрабатывает, отправляется второе сообщение и только потом второму клиенту отправляется первое сообщение, ну и далее... всё отрабатывает правильно - с железом работают по очереди не конфликтуя. проблема в том , что пока не отрабоает первые клиент - второй не получает сообщение эти 20 сек, и он начинает сомневаться в работе системы как сделать так чтоб первое сообщение (с текстом "ждите") появилось сразу у всех клиентов, ну а обработка в методе В шла по очереди? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:47 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Это называется "критическая секция". Варианты - разные. Код: java 1. 2. 3.
Или Reentrant lock. Как в документации https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html Или есть еще вариант семафор. Для более сложной логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:51 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
mayton, меня смущает то, что метод А получается заблокирован. может метод В вызывать отдельном потоке? но как синхронизировать методы В? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 18:56 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Попробуй нарисовать свой алгоритм в виде такой картики (по образу и подобию). Здесь например точки - это потоки. Кружочки - состояния. А прямоугольники - это барьеры (Locks, CriticalSections) которые либо делают форк новых потоков либо join с условием. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:15 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя методе В идёт работа с железом , ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:18 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя как сделать так чтоб первое сообщение (с текстом "ждите") появилось сразу у всех клиентов, ну а обработка в методе В шла по очереди? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:21 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя mayton, меня смущает то, что метод А получается заблокирован. может метод В вызывать отдельном потоке? но как синхронизировать методы В? Если убрать synchronized то что ломается? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:24 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя есть сервлет ... Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:27 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя чтоб первое сообщение (с текстом "ждите") появилось сразу у всех клиентов, Часики или прогрессбар или Ждите.... делают клиенты у себя. Сервер причем?) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:28 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
mayton, начал и возник вопрос - клиенты обращаются к сервлету - для каждого клиента сервлет работает в отдельном потоке? сервлет вызывает метод А , этот метод доступен этому же сервлету другого клиента? чисто из логики метод А может запускаться параллельно - все данные только входные + обращение к базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:32 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp что именно ломается если одновременно? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:34 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя PetroNotC Sharp что именно ломается если одновременно? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:34 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя клиента сервлет работает в отдельном потоке? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:36 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя этот метод доступен этому же сервлету другого клиента? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:37 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя если одновременно к сервлету обращаются 2 клиента то происходит следующее первому клиенту оправляется сообщение, вызывается метод В, отрабатывает, отправляется второе сообщение и только потом второму клиенту отправляется первое сообщение мне одному не очевидно, почему так? У тебя метод А тоже синхронизирован? Или метод сервлета? Если нет, то метод сервлета и первое сообщение (я ж надеюсь оно асинхронное?) из А должно вызываться столько раз одновременно, сколько одновременных обращений, просто все кроме одного застрянут на вызове метода B и будут ждать входа. И причем тут критические секции я тоже не понял. По-моему тут речь об организации асинхронного обмена сообщениями с клиентами при наличии блокирующей очереди. Как раз таки задачка для твоих любимых вебсокетов (как пример, другое ж все равно не возмьешь) - передал уникальный id, поставил задачу в очередь - получил результат и отправил заказчику. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:37 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp в js таймер на 2 сек. Если не пришло то мессагу хотя в твоём упоминание js есть очень привлекательная мысль. но не решающая данную проблему....очень даже хорошая мысль.... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:37 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Ну или ранше времени выше flush написали. Или асинхронный сервлет или.... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:39 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя mayton, начал и возник вопрос - клиенты обращаются к сервлету - для каждого клиента сервлет работает в отдельном потоке? сервлет вызывает метод А , этот метод доступен этому же сервлету другого клиента? чисто из логики метод А может запускаться параллельно - все данные только входные + обращение к базе. Надо почитать спеку. По моему сервлет обладает из коробки идеальным параллелизмом. А ограничения уже ставят в него Tomcat/ и сами разрабы когда привязываеют его в БД коннекшенам пулам и прочее. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:39 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
mayton, Пока он пример в коде не даст, будем гадать... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:43 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
сервлет работает с telegram, сообщения приходят из telegram, и туда же отправляются Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
chpasha У тебя метод А тоже синхронизирован? chpasha Или метод сервлета? chpasha из А должно вызываться столько раз одновременно, сколько одновременных обращений, просто все кроме одного застрянут на вызове метода B и будут ждать входа. И причем тут критические секции я тоже не понял. если б ws - было б по другому - проще или сложнее трудно сказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:46 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
грубо говоря - ответы идут не коннкшеном сервлета , а каждый раз новым, плохо это или хорошо - вопрос открытый, на данном этапе нужно просто заставить все работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:49 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И код сюда. Нафиг нам требуху твою смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:53 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя, Это метод setPostTelega()? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 19:56 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Пока он пример в коде не даст, будем гадать... стоит фильтр - рулится с подключениями - код "стандартный" дальше - сервлет doPost, получает данные от telegram в виде json - обработка, выделение нужного всё "стандартно" , по итогу вызов метода из класса А , в классе А методов несколько , вызываются в зависимости от обработки сообщения telegram. в методе А обрабатываются данные и по результатам обработки вызывается метод И из класса ВВ всё стандартно, если б не 20секунд... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 20:01 |
|
|
start [/forum/topic.php?fid=59&msg=40026558&tid=2120580]: |
0ms |
get settings: |
18ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
37ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
486ms |
get tp. blocked users: |
1ms |
others: | 283ms |
total: | 835ms |
0 / 0 |