powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / многопоточность...как лучше организовать?
25 сообщений из 160, страница 5 из 7
многопоточность...как лучше организовать?
    #40027056
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton,

вот такое

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
static ExecutorService executor = Executors.newFixedThreadPool(3);

......

 case "update_id":

                    Future future = executor.submit((Callable<String>) () -> {
                        Update_id(obj);
                        return null;
                    });
//                    Update_id(obj);
                    break;



работает(т.е. java отрабатывает, что с железом - надо смотреть, но ошибок тоже не даёт)

объясни почему
в описаловке (что нашёл) почитал, о не понял

Тут ... понимаешь вопросы не ко мне а к тебе. Ты поставил в пул 3 конкурирующих потока.
Это значит что 3 параллельных Update_id(obj) будут работать. К каким последствиям
это приводит - ты должен ответить а не я. Я не знаю ограничений.

Ставить методом тыка любые параметры - это как минимум непрофессионально. Ты до того
должен объяснить сам себе что ты ОЖИДАЕШЬ в следстве такой архитектуры.

И то что там ошибок не дает это не доказательство правоты. Мультипоточка вообще
очень тяжело доказывается. Она даже модульными тестами ниразу не доказывается.
Только в проде и только под нагрузкой.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027058
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Открой servlet 3.0 там тоже есть решение. С 2009 года и java 6 валяется.
давай покажи
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027059
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо форкнуть тяпничный топик про асинхронные сервлеты.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027060
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тут ... понимаешь вопросы не ко мне а к тебе. Ты поставил в пул 3 конкурирующих потока.
Это значит что 3 параллельных Update_id(obj) будут работать. К каким последствиям
это приводит - ты должен ответить а не я. Я не знаю ограничений.

Ставить методом тыка любые параметры - это как минимум непрофессионально. Ты до того
должен объяснить сам себе что ты ОЖИДАЕШЬ в следстве такой архитектуры.

И то что там ошибок не дает это не доказательство правоты. Мультипоточка вообще
очень тяжело доказывается. Она даже модульными тестами ниразу не доказывается.
Только в проде и только под нагрузкой.
вообще то тут число потоков неизвестно.
на данный момент 3 просто взято для тестов, если взять 1 а, запустить 2 обращения - будет ошибка.

пока факт работы - подтверждает правильность пути - надо запускать в отдельных потоках.
я ещё в начальных страницах предлагал вот этот метод
Bot.DFL_control.DFL_set_IP(dfl_host, dfl_home_name, dfl_IPRuleFolder, mc[0]);
запускать в отдельном потоке, т.е. не зависимо от того что там запущено организовывать новый поток и его там запускать. вот только вопрос был -как обеспечить синхронизацию этих методов между собой?
если в одном потоке то синхронизация должна разлулить это сама?
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027062
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У фьючера есть методы 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
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027063
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
топик про асинхронные сервлеты.
тут дело не в асинхронных сервлетах.

если взять обыкновенный сайт - и два обыкновенных клиента обратятся к этому сервлету - они получат первое сообщение сразу, но будет проблема когда они обратятся к методу Bot.DFL_control.DFL_set_IP

их надо ставить либо в очередь, либо как-то синхронизировать

и есть ситуация когда это вариант и вариант с телеграм работают вместе
метод Bot.DFL_control.DFL_set_IP может вызываться как выше показано так и из некоторых jsp страниц

метод Bot.DFL_control.DFL_set_IP должен работать только в одном экземпляре в любой момент времени

как лучше это организовать?
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027064
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы - ходим по кругу. Мой самый первый совет - обернуть synchronized - был правильным.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А асинк сервлеты - это уже не про твою душу. Это я - для себя и для форума предложил.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027067
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC Sharp
Открой servlet 3.0 там тоже есть решение. С 2009 года и java 6 валяется.
давай покажи
щаз))) =
Ты и 20 страниц можешь тут тусить. До понедельника
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027072
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
метод Bot.DFL_control.DFL_set_IP должен работать только в одном экземпляре в любой момент времени
для трех клиентов по очереди?
3* 30сек = 90 сек ждет третий клиент?
Говорить глупости твоя профессия. Особенно когда метод в "экземпляре"
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027080
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пятничный форк Async Servlets
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027107
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
для трех клиентов по очереди?
3* 30сек = 90 сек ждет третий клиент?
Говорить глупости твоя профессия. Особенно когда метод в "экземпляре"
странный ты, видимо ты из тех кто "... не читал, но осуждаю..."
не зная тонкости проблемы говорить всякую ерунду.
железо - роутер. ему передаётся ip, и прочая инфа. и даётся команда - сохранить . "сохранить" это значит записать в пзу. процесс записи 15сек. и ты хоть что делай - пока пишется - новый процесс записи организовать не возможно. можно записывать данные для одного юзера, а можно и для 10 - только вопрос сколько ждать после прихода данных от первого юзера до прихода от второго? 1 секунду? 20? 5? чтоб их одновременно записать.
тот вариант что работает - не устраивал тем, что второй юзер дал команду и не получает быстрого ответа (реакции) от системы (в отличии от того когда он был первым) и начинает волноваться, совершать не нужные действия - а реакция системы - ответ "ждите".
вероятность таких обращений 1-2 в день и то не каждый.
ели поставить вместо роутера севачок с iptebles - таких проблем не будет. но обслуживание системника и коробочки- разные вещи.
так что:
PetroNotC Sharp
Говорить глупости твоя профессия.

это относится к тебе.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027108
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
железо - роутер. ему передаётся ip, и прочая инфа. и даётся команда - сохранить . "сохранить" это значит записать в пзу. процесс записи 15сек.
Ну и в чём проблема выдать команду на смену конфигурации отдельно, а команду на запись изменённой конфигурации - отдельно? Вообще никак не завязываясь на запросы пользователей.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027114
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Ну и в чём проблема выдать команду на смену конфигурации отдельно, а команду на запись изменённой конфигурации - отдельно? Вообще никак не завязываясь на запросы пользователей.
дело в том, что юзер в телеграм передаёт свой ip, и ждёт когда ему будет дано разрешение на подключение по rdp с этого ip.
вот с помощью запуска записи в отдельном потоке и получится - отдельно
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027119
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
передаёт свой ip, и ждёт
непередаваемая тупость не описать мемберам форума ЭТО в виде псевдокода или юзкейса или бл или ВИ.

setIP(myIP) ;
//юзверь ждёт тут (где?) ответа (синхронного или асинхронного?)

Вадя, не тупи. Пока не начнешь так писать тебя никто тут не понимает.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027120
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
железо - роутер. ему передаётся ip, и прочая инфа. и даётся команда - сохранить . "сохранить" это значит записать в пзу. процесс записи 15сек. и ты хоть что делай - пока пишется - новый процесс записи организовать не возможно. можно записывать данные для одного юзера, а можно и для 10 - только вопрос сколько ждать после прихода данных от первого юзера до прихода от второго? 1 секунду? 20? 5? чтоб их одновременно записать.
тот вариант что работает - не устраивал тем, что второй юзер дал команду и не получает быстрого ответа (реакции) от системы (в отличии от того когда он был первым) и начинает волноваться, совершать не нужные действия - а реакция системы - ответ "ждите".
вероятность таких обращений 1-2 в день и то не каждый.
ели поставить вместо роутера севачок с iptebles - таких проблем не будет. но обслуживание системника и коробочки- разные вещи.
так что:

Тебя дураком обозвать? НУЖЕН КОД ИЗ МЕТОДОВ С КОММЕНТТАМИ.
На методы можно вешать аннотации тогда.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027121
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC SharpГоворить глупости твоя профессия.

это относится к тебе.ТС ,из 4 мемберов, тебя никто тут не понял.
Включая меня.
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027124
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю за вадю юзкейс и постановку задачи.
//сервис записи в роутер инфы о юзверях,

Код: java
1.
setRouterInfoUsers(listUsers);// 15s
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027125
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дальше что нужно вадя?
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027154
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

ты вообще знаком как работает telegram?
возьмём к примеру на смартфоне - это приложение
оно подключено к серверу TELEGRAM, который находится хер знает где
клиент - на смартфоне в приложении телеграм что-то набирает (возможны варианты -текс и команды, нас интересуют только команды, команда начинается с / )
и отправляет это сервере телеграм, это происходит в так называемом боте.
ну и так далее....

сервер телеграм отправляет (переправляет) эти сообщения моему серверу - тут есть 2 варианта - вебхук и лонгполлинг
для приема по вебхуку я использую сервлет.
@WebServlet(name = "WebhookBot", urlPatterns = {"/pagebot"})
public class WebhookBot extends HttpServlet {


Код: java
1.
2.
3.
4.
5.
6.
 protected void doPost(HttpServletRequest request, HttpServletResponse response){

       Update_id(obj);


   }


от сервера телеграм приходит много видов сообщений в doPost происходит частичная выборка информации
эта информация передаётся в метод Update_id Б который находится в этом сервлете
Код: java
1.
2.
3.
    public static void Update_id(JSONObject obj) {
       ip(chat_id, data );
    }


в методе Update_id происходит дальнейшая обработка и вызывается
метод ip из класса IP
Код: java
1.
2.
3.
4.
5.
6.
7.
public class IP {

    public static void ip(int chat_id, String data) {
           Bot.DFL_control.DFL_set_IP(dfl_host, dfl_home_name, dfl_IPRuleFolder, mc[0]);
   }

}


в методе ip вызывается метод Bot.DFL_control.DFL_set_IP из соответствующего класса

дак вот метод DFL_set_IP должен иметь монопольный доступ к железу, должен работать только один экземпляр этого метода в любое время - иначе железу будет плохо.


сервер телеграм имеет доступ к моему серверу только в одной сессии . сообщения шлются по очереди.

дальше разжёвывать?
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027155
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где очередь?
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027158
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

если тебе будет более понятно можно изобразить так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
protected void doPost(HttpServletRequest request, HttpServletResponse response){

//тут хо хера обработки

       Bot.DFL_control.DFL_set_IP(dfl_host, dfl_home_name, dfl_IPRuleFolder, mc[0]);


   }
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027159
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А где очередь?
очереди как таковой не надо
если метод DFL_set_IP синхронизирован - то они будет выполняться сам по очереди
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027161
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
А где очередь?
очереди как таковой не надо
если метод DFL_set_IP синхронизирован - то они будет выполняться сам по очереди

Для synchronized механизм FIFO не работает. Фактически можно утверждать
что ожидающие потоки будут обслужены в рандомном порядке.

Я просто акцентирую на этом внимание. Если нужна справедливая блокировка - тогда надо искать
другие подходы. Например посмотреть на ReentrantLock и его конструктор. Там есть опция
"справедливости" (fair lock).

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html
...
Рейтинг: 0 / 0
многопоточность...как лучше организовать?
    #40027165
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Для synchronized механизм FIFO не работает. Фактически можно утверждать
что ожидающие потоки будут обслужены в рандомном порядке.
в данном случае это не страшно.
главное чтоб после отправки юзер получил ответ "ждать" как можно быстрее
...
Рейтинг: 0 / 0
25 сообщений из 160, страница 5 из 7
Форумы / Java [игнор отключен] [закрыт для гостей] / многопоточность...как лучше организовать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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