|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя mayton, вот такое Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
работает(т.е. java отрабатывает, что с железом - надо смотреть, но ошибок тоже не даёт) объясни почему в описаловке (что нашёл) почитал, о не понял Тут ... понимаешь вопросы не ко мне а к тебе. Ты поставил в пул 3 конкурирующих потока. Это значит что 3 параллельных Update_id(obj) будут работать. К каким последствиям это приводит - ты должен ответить а не я. Я не знаю ограничений. Ставить методом тыка любые параметры - это как минимум непрофессионально. Ты до того должен объяснить сам себе что ты ОЖИДАЕШЬ в следстве такой архитектуры. И то что там ошибок не дает это не доказательство правоты. Мультипоточка вообще очень тяжело доказывается. Она даже модульными тестами ниразу не доказывается. Только в проде и только под нагрузкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 22:19 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Открой servlet 3.0 там тоже есть решение. С 2009 года и java 6 валяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 22:24 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Надо форкнуть тяпничный топик про асинхронные сервлеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 22:25 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
mayton Тут ... понимаешь вопросы не ко мне а к тебе. Ты поставил в пул 3 конкурирующих потока. Это значит что 3 параллельных Update_id(obj) будут работать. К каким последствиям это приводит - ты должен ответить а не я. Я не знаю ограничений. Ставить методом тыка любые параметры - это как минимум непрофессионально. Ты до того должен объяснить сам себе что ты ОЖИДАЕШЬ в следстве такой архитектуры. И то что там ошибок не дает это не доказательство правоты. Мультипоточка вообще очень тяжело доказывается. Она даже модульными тестами ниразу не доказывается. Только в проде и только под нагрузкой. на данный момент 3 просто взято для тестов, если взять 1 а, запустить 2 обращения - будет ошибка. пока факт работы - подтверждает правильность пути - надо запускать в отдельных потоках. я ещё в начальных страницах предлагал вот этот метод Bot.DFL_control.DFL_set_IP(dfl_host, dfl_home_name, dfl_IPRuleFolder, mc[0]); запускать в отдельном потоке, т.е. не зависимо от того что там запущено организовывать новый поток и его там запускать. вот только вопрос был -как обеспечить синхронизацию этих методов между собой? если в одном потоке то синхронизация должна разлулить это сама? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 22:35 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
У фьючера есть методы isDone(), isCanceled(), и синхронный метод get() который блокируется до тех пор пока фьючерз не закончит работу и не вернет результат. https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html Вот с ними и синхронизируйся. А если тебе нужен глобальный счетчик - типа "есть ли хоть кто-то живой в потоках" - то посмотри в CoundDownLatch https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 22:44 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
mayton топик про асинхронные сервлеты. если взять обыкновенный сайт - и два обыкновенных клиента обратятся к этому сервлету - они получат первое сообщение сразу, но будет проблема когда они обратятся к методу Bot.DFL_control.DFL_set_IP их надо ставить либо в очередь, либо как-то синхронизировать и есть ситуация когда это вариант и вариант с телеграм работают вместе метод Bot.DFL_control.DFL_set_IP может вызываться как выше показано так и из некоторых jsp страниц метод Bot.DFL_control.DFL_set_IP должен работать только в одном экземпляре в любой момент времени как лучше это организовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 22:46 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Мы - ходим по кругу. Мой самый первый совет - обернуть synchronized - был правильным. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 22:55 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
А асинк сервлеты - это уже не про твою душу. Это я - для себя и для форума предложил. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 22:56 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя PetroNotC Sharp Открой servlet 3.0 там тоже есть решение. С 2009 года и java 6 валяется. Ты и 20 страниц можешь тут тусить. До понедельника ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 23:03 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя метод Bot.DFL_control.DFL_set_IP должен работать только в одном экземпляре в любой момент времени 3* 30сек = 90 сек ждет третий клиент? Говорить глупости твоя профессия. Особенно когда метод в "экземпляре" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2020, 23:25 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Пятничный форк Async Servlets ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 00:19 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp для трех клиентов по очереди? 3* 30сек = 90 сек ждет третий клиент? Говорить глупости твоя профессия. Особенно когда метод в "экземпляре" не зная тонкости проблемы говорить всякую ерунду. железо - роутер. ему передаётся ip, и прочая инфа. и даётся команда - сохранить . "сохранить" это значит записать в пзу. процесс записи 15сек. и ты хоть что делай - пока пишется - новый процесс записи организовать не возможно. можно записывать данные для одного юзера, а можно и для 10 - только вопрос сколько ждать после прихода данных от первого юзера до прихода от второго? 1 секунду? 20? 5? чтоб их одновременно записать. тот вариант что работает - не устраивал тем, что второй юзер дал команду и не получает быстрого ответа (реакции) от системы (в отличии от того когда он был первым) и начинает волноваться, совершать не нужные действия - а реакция системы - ответ "ждите". вероятность таких обращений 1-2 в день и то не каждый. ели поставить вместо роутера севачок с iptebles - таких проблем не будет. но обслуживание системника и коробочки- разные вещи. так что: PetroNotC Sharp Говорить глупости твоя профессия. это относится к тебе. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 07:53 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя железо - роутер. ему передаётся ip, и прочая инфа. и даётся команда - сохранить . "сохранить" это значит записать в пзу. процесс записи 15сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 08:00 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Ну и в чём проблема выдать команду на смену конфигурации отдельно, а команду на запись изменённой конфигурации - отдельно? Вообще никак не завязываясь на запросы пользователей. вот с помощью запуска записи в отдельном потоке и получится - отдельно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 11:15 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя передаёт свой ip, и ждёт setIP(myIP) ; //юзверь ждёт тут (где?) ответа (синхронного или асинхронного?) Вадя, не тупи. Пока не начнешь так писать тебя никто тут не понимает. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 12:56 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя железо - роутер. ему передаётся ip, и прочая инфа. и даётся команда - сохранить . "сохранить" это значит записать в пзу. процесс записи 15сек. и ты хоть что делай - пока пишется - новый процесс записи организовать не возможно. можно записывать данные для одного юзера, а можно и для 10 - только вопрос сколько ждать после прихода данных от первого юзера до прихода от второго? 1 секунду? 20? 5? чтоб их одновременно записать. тот вариант что работает - не устраивал тем, что второй юзер дал команду и не получает быстрого ответа (реакции) от системы (в отличии от того когда он был первым) и начинает волноваться, совершать не нужные действия - а реакция системы - ответ "ждите". вероятность таких обращений 1-2 в день и то не каждый. ели поставить вместо роутера севачок с iptebles - таких проблем не будет. но обслуживание системника и коробочки- разные вещи. так что: Тебя дураком обозвать? НУЖЕН КОД ИЗ МЕТОДОВ С КОММЕНТТАМИ. На методы можно вешать аннотации тогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 12:58 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя PetroNotC SharpГоворить глупости твоя профессия. это относится к тебе.ТС ,из 4 мемберов, тебя никто тут не понял. Включая меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 13:01 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Делаю за вадю юзкейс и постановку задачи. //сервис записи в роутер инфы о юзверях, Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 13:09 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
Дальше что нужно вадя? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 13:10 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, ты вообще знаком как работает telegram? возьмём к примеру на смартфоне - это приложение оно подключено к серверу TELEGRAM, который находится хер знает где клиент - на смартфоне в приложении телеграм что-то набирает (возможны варианты -текс и команды, нас интересуют только команды, команда начинается с / ) и отправляет это сервере телеграм, это происходит в так называемом боте. ну и так далее.... сервер телеграм отправляет (переправляет) эти сообщения моему серверу - тут есть 2 варианта - вебхук и лонгполлинг для приема по вебхуку я использую сервлет. @WebServlet(name = "WebhookBot", urlPatterns = {"/pagebot"}) public class WebhookBot extends HttpServlet { Код: java 1. 2. 3. 4. 5. 6.
от сервера телеграм приходит много видов сообщений в doPost происходит частичная выборка информации эта информация передаётся в метод Update_id Б который находится в этом сервлете Код: java 1. 2. 3.
в методе Update_id происходит дальнейшая обработка и вызывается метод ip из класса IP Код: java 1. 2. 3. 4. 5. 6. 7.
в методе ip вызывается метод Bot.DFL_control.DFL_set_IP из соответствующего класса дак вот метод DFL_set_IP должен иметь монопольный доступ к железу, должен работать только один экземпляр этого метода в любое время - иначе железу будет плохо. сервер телеграм имеет доступ к моему серверу только в одной сессии . сообщения шлются по очереди. дальше разжёвывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 16:24 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
А где очередь? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 16:25 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, если тебе будет более понятно можно изобразить так Код: java 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 16:32 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
mayton А где очередь? если метод DFL_set_IP синхронизирован - то они будет выполняться сам по очереди ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 16:35 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
вадя mayton А где очередь? если метод DFL_set_IP синхронизирован - то они будет выполняться сам по очереди Для synchronized механизм FIFO не работает. Фактически можно утверждать что ожидающие потоки будут обслужены в рандомном порядке. Я просто акцентирую на этом внимание. Если нужна справедливая блокировка - тогда надо искать другие подходы. Например посмотреть на ReentrantLock и его конструктор. Там есть опция "справедливости" (fair lock). https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 16:40 |
|
многопоточность...как лучше организовать?
|
|||
---|---|---|---|
#18+
mayton Для synchronized механизм FIFO не работает. Фактически можно утверждать что ожидающие потоки будут обслужены в рандомном порядке. главное чтоб после отправки юзер получил ответ "ждать" как можно быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2020, 16:45 |
|
|
start [/forum/topic.php?fid=59&msg=40027067&tid=2120580]: |
0ms |
get settings: |
23ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
390ms |
get tp. blocked users: |
1ms |
others: | 287ms |
total: | 777ms |
0 / 0 |