Java ThreadPoolExecutor - достучаться до working threads

User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by crypto5 »

Komissar wrote:
Zorkus wrote:
crypto5 wrote:
Komissar wrote:а вот я думаю: как же кучу могучих сайтов слабали на PHP и RoR, не заморачиваясь тонкостями многопоточности?
Им наверное не нужно запускать в бекграунде и стопать запросы выполняющиея часами.
Есть прикольная книжка от инженегров твиттера (meap so far), Big Data называется. Если не читали, советую. Там любопытные вещи пишут об этом в том числе.
и какие реальные примеры?
все, что я слышал - от индусов
1. был хороший сайт на ПХП
2. привлек тысячи и тысячи юзеров
3. в какой-то момент стал тормозить, и начальство наняло Великий Индусский Консалтинг (ВИК)
4. ВИК все тщательно проанализировал и рекомендовал все переписать на Джаву с начала и до забора
..
...
....
10. (5 лет прошло) ВИК все еще пасется работает на проекте, но воз и ныне там, а пока для юзеров держат старый ПХП-сайт.
Твиттер например, и фейсбук на Ц++ наверное уже на большую половину написан.
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Интеррапт »

Вообще непонятно о чем тут речь - уверен, что в конечном итоге автор повесит запись в коллекцию и удаление из коллекции в beforeExecute/afterExecute.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Zorkus »

Komissar wrote:
Zorkus wrote:
crypto5 wrote:
Komissar wrote:а вот я думаю: как же кучу могучих сайтов слабали на PHP и RoR, не заморачиваясь тонкостями многопоточности?
Им наверное не нужно запускать в бекграунде и стопать запросы выполняющиея часами.
Есть прикольная книжка от инженегров твиттера (meap so far), Big Data называется. Если не читали, советую. Там любопытные вещи пишут об этом в том числе.
и какие реальные примеры?
все, что я слышал - от индусов
1. был хороший сайт на ПХП
2. привлек тысячи и тысячи юзеров
3. в какой-то момент стал тормозить, и начальство наняло Великий Индусский Консалтинг (ВИК)
4. ВИК все тщательно проанализировал и рекомендовал все переписать на Джаву с начала и до забора
..
...
....
10. (5 лет прошло) ВИК все еще пасется работает на проекте, но воз и ныне там, а пока для юзеров держат старый ПХП-сайт.
Нет, ну я про таких конечно не говорю. Я про примеры нормальных проектов, которые развиваются по как раз умной нормальной схеме (имхо):

- первую версию пишут на коленке ночью в баре (в общаге гарварда или стенфорда) на макбуке два хипстера, озаренные Идеей. Она убогая, медленная и кривая, но идея есть, люди привлекаются. Пишут на том, что знают и на чем быстрей - джанга, RoR, php, whatever. Показали инвестору, получили денежку, отметили, поехали дальше.
- вторую версию они пишут с привлечением некоторого числа людей, кому раздали акций по чуть-чуть. В компании уже десятки народа, работа кипит, сайт ползет вверх, о нем пишут, юзерная база растет.
- в некоторый момент старый код на этих самых php/джанге/рельсах начинает тормозить, + тормозить начинает все. Рентеринг, перекачка данных, кеши, сеть. Нанимаются бородатые умные дядьки, которые переписывают линуксовый драйвер сетевой для оптимизации производительности, пишут транслятор с php на С++, переписывают где на С, где на скалу, где на эрланг (не факт, что нужно, но вроде как быстрее становится), и так далее.

А писали бы сразу надежно, сурьезно и на века, на С++ или яве - работающего сайта бы не получили до сих пор, или получили бы, но когда тренд уже ушел. Это мое мнение.
Примеры - ну фейсбук и твиттер, если погуглить можно еще найти наверняка. Из российских - яндекс (имхо), Одноклассники.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Zorkus »

Интеррапт wrote:
Zorkus wrote: Если единственная проблема автора в том, что нужен доступ к этой коллекции, а злые дизайнеры j.u.c. не открыли ее в паблик, то в чем проблема, через reflection, setAccessible(true) и вперед. Будет работать всегда и без всякого геморроя и оверхеда за исключением двух случаев:

1) прога работает в jvm с суперстрогим security manager, которые не дает дергать через reflection поля. Я в реальности такого не встречал ни разу.
2) в следующем JDK структура этого пуля изменится. Ну и черт с ним, во время апгрейда переписать за 5 минут на массив или чего там. Я считаю, юзать приватные апи такие вещей как j.u.c. вполне нормально и цивильно.
Я заикался про reflection на предидущей - автор ответил, что нет. И это вполне разумно, что нет. Непонятно, как переписывать за 5 минут, если допустим этот код идет как компонента с какой-то библиотекой для вашего кастомера. И он решит апгрейднуть версию Джавы. И все накроется медным тазом. Это не считая того, что нужно каким-то образом помнить, где ты чего через reflection делал и при апргрейде Джавы - инспектировать все свои рефлектные извращения на предмет соответствия.
Ну, ты ж знаешь что Java кроссплатформенно и обратно совместима до тех пор, пока абстракция не потекла, а там уж как получится :) Я сорри, привык мыслить категориями облачных деплойментов и когда мы контролируем среду, где все крутится, мы управляем / синхронизируем апдейта явы, оракла, линукса и прочего.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Zorkus »

Интеррапт wrote:Вообще непонятно о чем тут речь - уверен, что в конечном итоге автор повесит запись в коллекцию и удаление из коллекции в beforeExecute/afterExecute.
+1. я бы так и делал.
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Komissar »

Zorkus wrote:
А писали бы сразу надежно, сурьезно и на века, на С++ или яве - работающего сайта бы не получили до сих пор, или получили бы, но когда тренд уже ушел. Это мое мнение.
Примеры - ну фейсбук и твиттер, если погуглить можно еще найти наверняка. Из российских - яндекс (имхо), Одноклассники.
именно на яве и написано большинство дохлых сайтов.
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Интеррапт »

Zorkus wrote: Ну, ты ж знаешь что Java кроссплатформенно и обратно совместима до тех пор, пока абстракция не потекла, а там уж как получится :) Я сорри, привык мыслить категориями облачных деплойментов и когда мы контролируем среду, где все крутится, мы управляем / синхронизируем апдейта явы, оракла, линукса и прочего.
Все-равно боязно, можно просто забыть, где и чего рефлексировал, особенно на проектах побольше чем Hello World. Ну или самому какие-то compile-time аннотации писать и помечать ими метод в котором использовал рефлексии с параметром указывающим, на какой версии Java этот метод был протестирован.
А то вдруг они вообще нафиг уберут все эти коллекции или имплементацию куда-нибудь в native :) И тогда переписка займет явно не 5 минут.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Zorkus »

Komissar wrote:
Zorkus wrote:
А писали бы сразу надежно, сурьезно и на века, на С++ или яве - работающего сайта бы не получили до сих пор, или получили бы, но когда тренд уже ушел. Это мое мнение.
Примеры - ну фейсбук и твиттер, если погуглить можно еще найти наверняка. Из российских - яндекс (имхо), Одноклассники.
именно на яве и написано большинство дохлых сайтов.
Да ну какие, например? Именно сайтов, именно дохлых, и именно на яве? Если брать приличные проекты? Из первой тридцадки рейтинга алексы например если смотреть, на яве много чего, но дохлого там мало.

Гугл? С++, ява, еще наверное много чего. Амазон? Всего намешано, много на С написано, есть на перле код, ява тоже конечно есть. Фейсбук - php and C++, твиттер - руби и скала, ибей - опять таки там зоопарк дикий технологий но да, на яве и оракле много чего, как мне рассказывали. яндекс- движок оригинальный на С++, фронденд на xslt/perl/javascript, потом для доп. сервисов уже яву стали прикручивать. Википедия - ну там особый случай, там статика сплошная, вроде там на php работает сам сайт.

В общем, по мне, ява для фронденда веб-проектов не очень, для инфраструктуры сзади - вполне и вполне хорошо. Если, конечно, пишут на индусские консалтеры :ROFL:

А если про более мелкие сайты говорить, то именно сайты больше как раз на php/python/ruby. На яве тупо дольше писать намного, и сама технология более мастодонтная.
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Сабина »

Zorkus wrote:Да ну какие, например? Именно сайтов, именно дохлых, и именно на яве? Если брать приличные проекты? Из первой тридцадки рейтинга алексы например если смотреть, на яве много чего, но дохлого там мало.
Да это все wishful thinking ... Помню драчку-собачку на одном форуме, где упорно пытались доказать какая она медленная, плохая, кривая. Да со всем последним инструментарием для performance да с грамoтными руками там можно такое сваять - что все залетает. И не только на server side
https://www.youtube.com/watch?v=wOwblaKmyVw
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Zorkus »

http://www.insight-it.ru/masshtabiruemo ... instagram/ - вот кстати интересная статья, про инстаграмм.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Zorkus »

Сабина wrote:
Zorkus wrote:Да ну какие, например? Именно сайтов, именно дохлых, и именно на яве? Если брать приличные проекты? Из первой тридцадки рейтинга алексы например если смотреть, на яве много чего, но дохлого там мало.
Да это все wishful thinking ... Помню драчку-собачку на одном форуме, где упорно пытались доказать какая она медленная, плохая, кривая. Да со всем последним инструментарием для performance да с грамoтными руками там можно такое сваять - что все залетает. И не только на server side
Так я за яву полностью. В рамках ее применимости :)
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Alexandr »

Montchik wrote: Без разницы как это сделано внутри executora. Мне бы доступ к active worker threadам получить. Reflection не подходит.
вы пытаетесь руками залезть в абстракцию! :)
в общем случае - это зло :)
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Alexandr »

Интеррапт wrote:Вообще непонятно о чем тут речь - уверен, что в конечном итоге автор повесит запись в коллекцию и удаление из коллекции в beforeExecute/afterExecute.
пока ваш вариант с наследованием и выставлением наружу интерфейса какой хочется имхо самый вменяемый из того, что успели обсудить в треде :))))
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Montchik »

Други! С statement.cancel это был просто пример зачем можед быть надо добраться до workers threads. Другой пример - отправить сообщение на сокет, который менеджится этим worker's thread. В этом случае наследование ThreadPoolExecutor и перекрытие beforeExecute и afterExecute не поможет.

А reflection это конечно же зло. И если мне не изменяет склероз, прямое назначение его облегчить жизнь разработчикам Java IDE.
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by valchkou »

Montchik wrote:Другой пример - отправить сообщение на сокет, который менеджится этим worker's thread. В этом случае наследование ThreadPoolExecutor и перекрытие beforeExecute и afterExecute не поможет.
так решение и на этот случай было упомянуто. обычный publish/subscriber.
в самом thred.run бегает бесконечный цикл, который все время считывает сообщения из shared location.
тому, кто то эти сообщения туда кладет, не нужно знать ничего ни про workers, ни про futures, ни даже executors

Code: Select all

class Worker implements Runnable{
   public void run(){
      while (true) {
          try{
             msg = SharedQueue.getNexMessage();
             ...
          }catch(SQLException ex){
             ...
          }
       }
   }
}

class SharedQueue() {
    public static Message getNexMessage() {
        // read from queue
    }

    public static void postMessage(Message msg) {
         // append to queue
    }
}
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Palych »

Montchik wrote:Другой пример - отправить сообщение на сокет, который менеджится этим worker's thread. В этом случае наследование ThreadPoolExecutor и перекрытие beforeExecute и afterExecute не поможет.
А что поможет?
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Montchik »

Задача workerов не ожидать появления сообщения в shared location, a работу свою основную делать. Типа слушать сокет, или там данные подкачивать с какого-нибудь блумберга. Хотя идея использования shared location для "общения" с воркерами интересная. Спасибо!
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Zorkus »

Montchik wrote:Други! С statement.cancel это был просто пример зачем можед быть надо добраться до workers threads. Другой пример - отправить сообщение на сокет, который менеджится этим worker's thread. В этом случае наследование ThreadPoolExecutor и перекрытие beforeExecute и afterExecute не поможет.

А reflection это конечно же зло. И если мне не изменяет склероз, прямое назначение его облегчить жизнь разработчикам Java IDE.
Прям вот уже "конечно"? :) По скорости уже давно практически не уступает прямому вызову, по запутанности кода - есть, конечно, но не так уж чтобы совсем смерть.

Не только разработчикм IDE, еще внутри разных фреймворков довольно активно используется, а так же когда надо использовать код, автор которого интерфейс продумал недостаточно (или этот интерфейс для наших нужд не подходит).
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Flash-04 »

crypto5 wrote:Твиттер например, и фейсбук на Ц++ наверное уже на большую половину написан.
sorry за оффтоп, по работе плотно общаюсь с SIEM (security events management) системами, которые все как один написаны на Java. так там давно уже уперлись в ограничения JVM из-за которых даже на могучем "железе" производительность аховая. Я всё жду, что будут создатели их систем с этим безобразием делать? Как-то не верится что они бросятся переписывать всё на C++ :food:
Not everyone believes what I believe but my beliefs do not require them to.
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Alexandr »

Flash-04 wrote:
crypto5 wrote:Твиттер например, и фейсбук на Ц++ наверное уже на большую половину написан.
sorry за оффтоп, по работе плотно общаюсь с SIEM (security events management) системами, которые все как один написаны на Java. так там давно уже уперлись в ограничения JVM из-за которых даже на могучем "железе" производительность аховая. Я всё жду, что будут создатели их систем с этим безобразием делать? Как-то не верится что они бросятся переписывать всё на C++ :food:
а причина аховости производительности известна? на Ц++ написать тоже можно креативно :mrgreen:
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Flash-04 »

известна. там совокупность нескольких факторов (кстати предел у всех примерно одинаков):
1. ограничения SQL БД которая используется для хранения собираемых данных. Там я смотрю есть тенденция "переползать" на облегченные версии MySQL/Postgress
2. Ограничения JVM на кол-во сетевых соединений (для коллекторов)
3. Ограничения производительносьти JVM связанные с garbage collectors. Для "правил" требуется много памяти, т.к. создается дофига динамических объектов, которые кроме того имеют малое время жизни. В итоге очень забавно смотреть на график memory allocation JVM, выглядит как пила. В итоге при росте нагрузки JVM только и занимается "сборкой мусора".
У моего любимого вендора для одного коннектора эмпирическое ограничение - всего 1,000 записей в секунду, потом коннектор становится неустойчивым и "падает". Причем "падает" не приложение, а весь JVM контейнер.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Montchik »

cluster?
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Flash-04 »

ага, такое решение предлагается, только стоит оно... :lol:
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by valchkou »

Flash-04 wrote: 2. Ограничения JVM на кол-во сетевых соединений (для коллекторов)
Извините, а это что за зверь? дайте ссыль почитать если есть
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Java ThreadPoolExecutor - достучаться до working threads

Post by Flash-04 »

valchkou wrote:Извините, а это что за зверь? дайте ссыль почитать если есть
ну вот тут:
http://stackoverflow.com/questions/5437 ... latest-jav

правда к продукту который я упомянул, это не совсем как бы относится, т.к. реально там соединений должно быть меньше, хотя... в большой enterprise сети его в принципе можно достичь.
Not everyone believes what I believe but my beliefs do not require them to.

Return to “Вопросы и новости IT”