|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Доброе время суток. Подскажите, решаема ли задача по создании такой модели: Есть множество потоков. Нужно, чтобы один из потоков занимался тем, что вызывал определенные методы из других потоков, используя их ИД, либо имени. Либо, каким-то образом, давал знать этому потоку, чтоб тот выполнил свой метод ( возможно, используя переменную в целевом потоке). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 19:34 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Lemkoleg, В тех потоках разве код не выполняется в данный момент времени? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 19:52 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, Выполняется ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 19:53 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegPetro123, Выполняетсятогда не понял смысла в задаче. Пример, 10 потоков сжимают 10 фильмов из avi в mpeg. И тут вы решили их тормознуть другой задачей? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 20:06 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, Вот именно. Или, хотя-бы, уведомить их каким-то образом. Как вариант, инициализировать переменную в целевом потоке. Целевой поток может просматривать значение этой переменной, время от времени ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 20:09 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Lemkoleg, Если напр. Цикл в потке и проверка переменной флага , то будет выход из цикла и поток закончится на сотом кадре фильма. Это надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 23:22 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, Ну, не совсем. interrupt() не очень подходит. В идеале, все ж таки, было бы здорово присвоить значение в переменной в целевом потоке. А он уж сам опрашивал ее, когда ему было бы удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 23:50 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, как-бы отправить сообщение потоку. А лучше объект. Возможно ли такое... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 23:55 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Lemkoleg, Делай. В чем проблема то переменную завести? По взрослому Cancelled token. По простому переменная. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 23:57 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegPetro123, как-бы отправить сообщение потоку. А лучше объект. Возможно ли такое...начни с переменной. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 23:57 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, Извиняюсь."Cancelled token" - что это? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 00:10 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, Все, нашел. Большое спасибо. Это уже что-то. Может, поможете с объектом? В идеале должно быть так. В целевом потоке есть очередь. Допустим ConcurrentSkipListMap. Поток, обработавший объект, ложит его в эту коллекцию Целевой же поток, по мере необходимости, опрашивает ее, и получает объект. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 00:29 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegPetro123, Все, нашел. Большое спасибо. Это уже что-то. Может, поможете с объектом? В идеале должно быть так. В целевом потоке есть очередь. Допустим ConcurrentSkipListMap. Поток, обработавший объект, ложит его в эту коллекцию Целевой же поток, по мере необходимости, опрашивает ее, и получает объект. Почитайте про дизайн патерн Producer/Consumer. Наиболее классический пример это проблема Дейскстры "Спящий Парикмахер". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 01:15 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegПоток, обработавший объект, ложит его в эту коллекцию Целевой же поток, по мере необходимости, опрашивает ее, и получает объектне делайте объекты под потоки. Делайте кусок работы, потом стартуйте поток. Нарезать задачу и стартовать поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 07:03 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegВ идеале должно быть так.вы не обосновали чем пул потоков не подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 07:25 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, Потому что, обьект нужен работающему потоку. Не одни раз ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 10:57 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegPetro123, Потому что, обьект нужен работающему потоку. Не одни развыше говорил. Работающему невозможно. Можно прервать выполняющийся поток. Ферштейн? Если у тебя для потока не все готово, не стартуй его. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 11:18 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Мне тоже кажется что проблема накручена. Не настаиваю, но если обьясните подробно задачу, может и найдем сообща нормальное решение. Пока извините, это похоже на сумбур и велосипед ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 11:40 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
забыл ник, Попробую описать. Есть поток, пишущий-читающий в файл. Строго по одному потоку на файл. Из файла он получает зашифрованный массив байтов. Часть этого массива остается в потоке, т.к. ему известно, что с этой частью ему делать. А вторую часть отдает потоку ( через LinkedBlockingQueue) другому потоку, который отсылает эту часть на другой сервер. До сюда проблем нет. Как только обработанный массив возвращается пишущему-читающему потоку, он должен вернуть его в изначальный поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 12:57 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Lemkolegзабыл ник, Попробую описать. Есть поток, пишущий-читающий в файл. Строго по одному потоку на файл. Из файла он получает зашифрованный массив байтов. Часть этого массива остается в потоке, т.к. ему известно, что с этой частью ему делать. А вторую часть отдает потоку ( через LinkedBlockingQueue) другому потоку, который отсылает эту часть на другой сервер. До сюда проблем нет. Как только обработанный массив возвращается пишущему-читающему потоку, он должен вернуть его в изначальный поток.ну и нагородил монстра. LemkolegКак только обработанный массив возвращается пишущему-читающему потоку, Т.е.тот поток что отправлял по http? строку мегабайт на сервер в сети ждет ответа? Или сокет сервер пишем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 13:07 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, Оправил массив байтов. Хотя, какая разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 13:15 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123, Есть один пишущий - читающий поток, связанный с сервером. Он и должен, каким-то образом, вернуть первоначальному потоку вернувшийся массив. Т.к. только в этом потоке известно, что дальше делать с массивом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 13:18 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Lemkoleg, Свой сокет сервер пишем. Несколько потоков ввода-вывода на сокете Мог бы сразу сказать. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 13:24 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
А почему такая архитектура? Вообще держать потоки невыгодно и немасштабируемо. Я так понимаю что вся соль в "Часть этого массива остается в потоке" Почему не сохранить его промежуточно на диск например, и когда придет ответ запустить Runnable с ссылкой на место на диске где сохранена эта часть? В целом я бы двигался к отделению бизнес-логики от утилитной(в вашем случае потоки, шедулинг, очереди и тд). Какие-то соображения по секьюрити или видимости мб? Я бы строил систему примерно так - 1) Есть три типа тасков - a) вычитать файл и сохранить промежуточные данные, из остальных данных составить message и положить его в queue b) Взять таск из queue отослать его на сервер, подождать ответ, сделать из него месседж и положить во вторую queue c) взять месседж из второй queue, вычитать первую часть массива и завершить весь цикл. Можно таски b и c объединить, но так как b блокирующий, это не есть гуд, я бы выделил для них различные пулы. 2) Есть две очереди(возможно 3, если файлы добавляются динамически) 3) Есть три пула, для каждого типа задачи. 4) Есть два коорднатора, Мониторят каждый свою queue и при поступлении месседжей, конструируют Runnable и посылают в пул Это если смотреть низкоуровнево. В принципе задача хорошо ложится на акторную модель, потому можно посмотреть также на Akka, если видите много возни с вариантом выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 13:40 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegНужно, чтобы один из потоков занимался тем, что вызывал определенные методы из других потоков Поциенту изучать методы wait и notify, а так же конструкцию synchronize. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 14:52 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
alex55555LemkolegНужно, чтобы один из потоков занимался тем, что вызывал определенные методы из других потоков Поциенту изучать методы wait и notify, а так же конструкцию synchronize. Пассажир уже знаком с очередью с блокировкой, которая вполне решает базовые методы синхронизации. Походу в архитектуре нужна вторая очередь с блокировкой для возврата обработанной части из первой очереди. Вообще походу модель видется примерно так первая очередь как Prod/Cos и вторая топик как Pub/Sub если объем данных большой, то где нибудь таблицу повесить в Редисе или еще в каком кеше. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 20:41 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Sergunka, Вторая очередь не решает проблем таких как: 1) излишних опросов потоками, ожидающих ответа, данной очереди. 2) наличие ответов уже несуществующим потокам. И то и другое снижает производительность. "Пассажира" конкретно интересует передача объекта потоку. Или, хотя-бы, инициализация переменной, находящейся в потоке. Если такой возможности нет ( как я понял ее нет), лучше так и написать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 21:19 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
alex55555, Открою большую тайну: wait-notify приведет к простою потока. Что не совместимо с данной схемой. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 21:21 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Как много неправильных суждений собрано в одном посте:) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 22:08 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Lemkoleg"Пассажира" конкретно интересует передача объекта потоку. Или, хотя-бы, инициализация переменной, находящейся в потоке. Если такой возможности нет ( как я понял ее нет), лучше так и написать. Да, такой возможности нету, ибо это против всякой логики, у вас какое-то неправильное понятие потока. Хотя чисто теоретически и этот финт проктолога возможен Потоки это деталь исполнения, если надо обменяться данными между двумя потоками то можно сделать эо двумя путями - 1) Передать в конструктор потока некий глобально доступный объект, и менять\опрашивать его либо 2) В самом потоке читать из известного места(файловой системы\базы данных\очереди) и если файл\запись\месседж появились то действовать соотвественно. Вам не дают сделать криво, но вы все равно упорно стараетесь вырвать зуб через жопу, ну удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 22:13 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegSergunka, Вторая очередь не решает проблем таких как: 1) излишних опросов потоками, ожидающих ответа, данной очереди. 2) наличие ответов уже несуществующим потокам. И то и другое снижает производительность. "Пассажира" конкретно интересует передача объекта потоку. Или, хотя-бы, инициализация переменной, находящейся в потоке. Если такой возможности нет ( как я понял ее нет), лучше так и написать. Вы невнимательно прочитали общий дизайн вторая должна быть топиком. Если бы Вы были знакомы с концепцией ексченж на RabbitMQ то там есть схема когда очередь открывается по фильтру авторIn this setup, we can see the direct exchange X with two queues bound to it. The first queue is bound with binding key orange, and the second has two bindings, one with binding key black and the other one with green. https://www.rabbitmq.com/tutorials/tutorial-four-python.html Скорее всего такая схема для оповещения продюсера из первой очерди наиболее рабочая, ну или как вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2018, 23:01 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Sergunka, Я правильно понимаю: группа очередей, на которые "подписываються" потоки? И получают сообщения из подписанной очереди. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 00:40 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegSergunka, Я правильно понимаю: группа очередей, на которые "подписываються" потоки? И получают сообщения из подписанной очереди. Вам надо уйти от концепции потока. Вам надо понять как строится продьюсер и консьюмер и как работают через топик публикатор и подписчик. В RabbitMQ там есть концепция когда можно через фильтр (exchange) раскидывать сообщения в разные очереди. На самом деле если Вы решите Вашу задачу на уровни концепции через очереди и топики, то дальше можно уже делать на низком уровни через потоки и синхронизацию если это важно в постановке задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 04:53 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
SergunkaВам надо уйти от концепции потока.+1 Потоки в голове автора главное и заслонили всё. Они ждут, подписываются, меняют БЛ, посылают байты в сеть и дожидаются ответа... Я вообще бы присудил по суду ему НЕ использовать потоки в течении квартала)). Из контейнера сервлетов даже переменную убрали чтобы потоки не туда вкорячивали. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 07:32 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Lemkolegalex55555, Открою большую тайну: wait-notify приведет к простою потока. Что не совместимо с данной схемой. Не знаю, что там за прекрасная схема, но простоя процессора не будет при просто нормальной реализации (то есть даже без прикрас и прочих чудес). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 13:16 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegДоброе время суток. Подскажите, решаема ли задача по создании такой модели: Есть множество потоков. Нужно, чтобы один из потоков занимался тем, что вызывал определенные методы из других потоков, используя их ИД, либо имени. Либо, каким-то образом, давал знать этому потоку, чтоб тот выполнил свой метод ( возможно, используя переменную в целевом потоке). Так не делается. Вам нужно выполнить какой-то метод. Ну так возмите и выполните его на текущем потоке. Но если методов много и вычислительной мощности одного потока не хватает, упакуйте метод в объект типа Runnable и отошлите в пул потоков. И если, наконец, все множество методов разбивается на подмножества, так что методы одного подмножества должны исполнятся последовательно, назначьте каждому подмножеству свой SerialExecutor, описанный в джавадоке к классу Executor. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2018, 16:59 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
rfqи отошлите в пул потоков он упорно считает потоки главнее методов и хочет во время жизни потока менять методы и впихивать внутрь потока методы. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2018, 19:06 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
LemkolegДоброе время суток. Подскажите, решаема ли задача по создании такой модели: Есть множество потоков. Нужно, чтобы один из потоков занимался тем, что вызывал определенные методы из других потоков, используя их ИД, либо имени. Либо, каким-то образом, давал знать этому потоку, чтоб тот выполнил свой метод ( возможно, используя переменную в целевом потоке). Тебе надо изучить примитивы синхронизации (семафоры, мьютексы и т.д.), межпоточные коммуникации и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2018, 23:15 |
|
Вызов метода из другого потока по ид потока
|
|||
---|---|---|---|
#18+
Petro123rfqи отошлите в пул потоков он упорно считает потоки главнее методов и хочет во время жизни потока менять методы и впихивать внутрь потока методы. он просто хочет иметь менеджер потоков ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2018, 23:16 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2121636]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
100ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 222ms |
0 / 0 |