Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / java.util.concurrent.*, concurrent collections / 25 сообщений из 30, страница 1 из 2
30.10.2018, 20:56
    #39725264
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Всем привет!

С java.util.concurrent.* раньше не сталкивался. Хочется по возможности понять как с ним работать и в каких задач он был бы полезен.

Изучение начал с
https://habr.com/company/luxoft/blog/157273/

Но мало что оттуда смог понять.

Может, пожалуйста, кто подскажет, какие классы из Concurrent Collections используете в работе, почему именно их?
В чём выигрыш при использовании java.util.concurrent.* пакета по сравнению с другими "средствами" работы с многопоточностью(типа synchronized).
...
Рейтинг: 0 / 0
30.10.2018, 21:14
    #39725280
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
если хочется разобраться то рекомендуемая книга Java Concurrency in Action, да непростая, но закроет почти все вопросы.
P/S. Заметил тенденцию - большинство программистов за 30 любят,уважают и почитывают именно книги, хотя не брезгуют и статьями и видео. Когда говорю молодому прочти книгу - вертят нос, и идут на хабр.. Печально это все
...
Рейтинг: 0 / 0
30.10.2018, 22:14
    #39725325
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
забыл никесли хочется разобраться то рекомендуемая книга Java Concurrency in Action, да непростая, но закроет почти все вопросы.
P/S. Заметил тенденцию - большинство программистов за 30 любят,уважают и почитывают именно книги, хотя не брезгуют и статьями и видео. Когда говорю молодому прочти книгу - вертят нос, и идут на хабр.. Печально это все
клевая книга. но чтоб ее понять надо прочесть не раз думаю и попробовать, честно столкнувшись с тем что там говорится. ну хотя б чуть-чуть. да, мне за 30 ))
...
Рейтинг: 0 / 0
30.10.2018, 22:26
    #39725329
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
mr_virtusМожет, пожалуйста, кто подскажет, какие классы из Concurrent Collections используете в работе, почему именно их?
В чём выигрыш при использовании java.util.concurrent.* пакета по сравнению с другими "средствами" работы с многопоточностью(типа synchronized).
ощущение что тебя на собеседовании об этом спросили ))

в чем выигрыш? да ни в чем. всё, абсолютно всё, что делает инструмент из пакета канкарренси можно повторить на обычных синках вейтах и нотифаях. это просто чуть более высокий уровень абстракции, инкапсулирующий в себе низкоуровневый.
...
Рейтинг: 0 / 0
31.10.2018, 00:14
    #39725381
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
...
Рейтинг: 0 / 0
31.10.2018, 07:33
    #39725445
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
mr_virtusВ чём выигрыш при использовании java.util.concurrent.* пакета по сравнению с другими "средствами" работы с многопоточностью(типа synchronized).в том что код можно разделить на прикладной и системный. Коллекция сущностей отдельно и потоки отдельно.
...
Рейтинг: 0 / 0
31.10.2018, 07:36
    #39725448
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Например, MS пошел дальше и ввел не только классы, а и целый оператор await в язык.
Чтобы прогеры не ломали голову мелочами когда фоновый поток нужен))
...
Рейтинг: 0 / 0
31.10.2018, 07:38
    #39725449
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
andreykaTчуть более высокий уровень абстракции, инкапсулирующий в себе низкоуровневый.да. Отсюда и плюсы минусы
...
Рейтинг: 0 / 0
31.10.2018, 13:23
    #39725791
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
andreykaTв чем выигрыш? да ни в чем. всё, абсолютно всё, что делает инструмент из пакета канкарренси можно повторить на обычных синках вейтах и нотифаях. это просто чуть более высокий уровень абстракции, инкапсулирующий в себе низкоуровневый.

reduce cognitive complexity?
...
Рейтинг: 0 / 0
31.10.2018, 16:26
    #39725980
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
andreykaTв чем выигрыш? да ни в чем. всё, абсолютно всё, что делает инструмент из пакета канкарренси можно повторить на обычных синках вейтах и нотифаях. это просто чуть более высокий уровень абстракции, инкапсулирующий в себе низкоуровневый.

Вы серьёзно? Почитайте хотя бы java.util.concurrent.ConcurrentHashMap#get и попытайтесь его понять. А потом попробуйты выразить чего через эти ваши вейты и нотифаи.
Или хотя бы первый абзац javadoc'а для этого класса почитайте.
...
Рейтинг: 0 / 0
31.10.2018, 16:30
    #39725981
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
mr_virtusВ чём выигрыш при использовании java.util.concurrent.* пакета по сравнению с другими "средствами" работы с многопоточностью(типа synchronized).
сравнение мягкого и теплого

например коллекции из java.util.concurrent и synchronized поверх "стандартных" коллекций - __совершенно__ разные алгоритмы

Concurrent Collections

Besides Queues, this package supplies Collection implementations designed for use in multithreaded contexts: ConcurrentHashMap, ConcurrentSkipListMap, ConcurrentSkipListSet, CopyOnWriteArrayList, and CopyOnWriteArraySet. When many threads are expected to access a given collection, a ConcurrentHashMap is normally preferable to a synchronized HashMap, and a ConcurrentSkipListMap is normally preferable to a synchronized TreeMap. A CopyOnWriteArrayList is preferable to a synchronized ArrayList when the expected number of reads and traversals greatly outnumber the number of updates to a list.
....
...
Рейтинг: 0 / 0
31.10.2018, 18:29
    #39726102
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Alexey TominandreykaTв чем выигрыш? да ни в чем. всё, абсолютно всё, что делает инструмент из пакета канкарренси можно повторить на обычных синках вейтах и нотифаях. это просто чуть более высокий уровень абстракции, инкапсулирующий в себе низкоуровневый.

Вы серьёзно? Почитайте хотя бы java.util.concurrent.ConcurrentHashMap#get и попытайтесь его понять. А потом попробуйты выразить чего через эти ваши вейты и нотифаи.
Или хотя бы первый абзац javadoc'а для этого класса почитайте.
напиши свою реализацию этого инструмента. это просто очередная библиотечка и всё. в то время как всякие синхронайзы вейты нотифаи - это фундаментальные решения платформы.
...
Рейтинг: 0 / 0
31.10.2018, 18:38
    #39726108
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Все ЯП - это простые библиотечки и все.

В то время, как шестнадцатеричные коды процессора - это фундаментальные решения платформы

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

p.s. Разобраться как работают и написать lock free алгоритмы (аналогичные java.util.concurrent) - блин, это надо быть алгоритмическим гением.
С учетом, что даже java.util.concurrent по качеству реализации lock free алгоритмов очень многими критикуется.

andreykaTAlexey Tominпропущено...
Вы серьёзно? Почитайте хотя бы java.util.concurrent.ConcurrentHashMap#get и попытайтесь его понять. А потом попробуйты выразить чего через эти ваши вейты и нотифаи.
Или хотя бы первый абзац javadoc'а для этого класса почитайте.
напиши свою реализацию этого инструмента. это просто очередная библиотечка и всё. в то время как всякие синхронайзы вейты нотифаи - это фундаментальные решения платформы.
...
Рейтинг: 0 / 0
31.10.2018, 18:53
    #39726113
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
я слышал противоположное мнение что локфри проще чем алгоритмы написаные на локах (вейтнотифаяхсинхронайзах).

если честно, то хз. мне кажется, что чтоб проблем с многопоточкой не было проще писать код с определенным акцентом. те же мессадж бейсд реализации - это суть многопоточное распределенное решение. и никаких локов там собссно нет. и если появятся - то значит ты чот не то запилил.
...
Рейтинг: 0 / 0
31.10.2018, 19:08
    #39726117
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Не очень понимаю, что общего между "мессадж бейсд реализации" и коллекциями

Как можно сделать "мессадж бейсд" коллекцию, напрмер Queue ? Можно пример кода ? И, желательно, со сравнением по производительности с ConcurrentLinkedQueue
...
Рейтинг: 0 / 0
31.10.2018, 21:11
    #39726155
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Для чего тебе эта очередь нужна? Вопрос так сказать для понимания задачи в целом.
...
Рейтинг: 0 / 0
01.11.2018, 16:10
    #39726697
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Просто коллекция. С очередью придумать сложно, ну пусть будет HashMap в котором для системе чата храним список юзеров которые в чате зарегистрировались.

Т.е. при поступлении сообщения от юзера (паралельно обрабатываются в разных обработчиках), например проверяем наличия записи в HashMap (требуется конкуррент доступ) и в зависимости от наличия/отсутвия такого юзера или работаем дальше или говорим пользователю ошибку - вы не зарегистировались в чате.

Достоинства использования коллекций из java.concurrent перед

synchronized {
обычный HashMap
}

производительность и меньшее кол-во реальных/"машинных" блокировок/коллизий

1) В случае synchronized или "мессадж бейсд" - у нас доступ к коллекции всегда осуществляется __единственным__ работающим потоком/CPU, остальные ждут. Или ждут на synchronized, или, при "мессадж бейсд", пока разгребатель мессаджей (актор) не освободится

Плюс, при "мессадж бейсд", потеря перформанса/latency на самих мессаджах должна просто зашкаливать. В общем, совершенно не нужный и лишний overhead при наличие стандартного пакета/классов обеспечивающих нужный функционал.

2) В случае конкурентных реализаций HashMap, если на верхнем уровне HashMap партиционирован, то в оптимальном случае, доступ к коллекции/данным осуществляется сразу несколькими потоками/CPU, истинно параллельно. Поэтому они и concurrent collection.

Алгоритмы "обычных" коллекций и concurrent коллекций - совершенно разные.

p.s. точных детали реализации concurrent коллекций из данного пакета в java - не помню (про HashMap). Плюс стандартные java'вские реализации часто неэффективны. Но всегда можно заюзать сторонние коллекции с нужными алгоритмами/характеристиками.

IMHO & AFAIK
...
Рейтинг: 0 / 0
01.11.2018, 16:10
    #39726698
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
andreykaTAlexey Tominпропущено...


Вы серьёзно? Почитайте хотя бы java.util.concurrent.ConcurrentHashMap#get и попытайтесь его понять. А потом попробуйты выразить чего через эти ваши вейты и нотифаи.
Или хотя бы первый абзац javadoc'а для этого класса почитайте.
напиши свою реализацию этого инструмента. это просто очередная библиотечка и всё. в то время как всякие синхронайзы вейты нотифаи - это фундаментальные решения платформы.

В то-то и дело, что этот пакет почти не использует ничего из стандартного, обходясь без блокировок.
Это, в некоторых случаях, даёт очень большой прирост производительности.
...
Рейтинг: 0 / 0
01.11.2018, 17:25
    #39726750
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
он использует нативные вызовы.. вот и всё.. ты их тоже можешь использовать :)
...
Рейтинг: 0 / 0
01.11.2018, 17:29
    #39726751
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
andreykaTон использует нативные вызовы.. вот и всё.. ты их тоже можешь использовать :)

Любой может использовать Theta* для нахождения кратчайшего пути, но почему то большинство тупо используют перебор, ага.
...
Рейтинг: 0 / 0
01.11.2018, 22:27
    #39726881
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Leonid KudryavtsevПросто коллекция. С очередью придумать сложно, ну пусть будет HashMap в котором для системе чата храним список юзеров которые в чате зарегистрировались.

Т.е. при поступлении сообщения от юзера (паралельно обрабатываются в разных обработчиках), например проверяем наличия записи в HashMap (требуется конкуррент доступ) и в зависимости от наличия/отсутвия такого юзера или работаем дальше или говорим пользователю ошибку - вы не зарегистировались в чате.

Достоинства использования коллекций из java.concurrent перед

synchronized {
обычный HashMap
}

производительность и меньшее кол-во реальных/"машинных" блокировок/коллизий

1) В случае synchronized или "мессадж бейсд" - у нас доступ к коллекции всегда осуществляется __единственным__ работающим потоком/CPU, остальные ждут. Или ждут на synchronized, или, при "мессадж бейсд", пока разгребатель мессаджей (актор) не освободится

Плюс, при "мессадж бейсд", потеря перформанса/latency на самих мессаджах должна просто зашкаливать. В общем, совершенно не нужный и лишний overhead при наличие стандартного пакета/классов обеспечивающих нужный функционал.

2) В случае конкурентных реализаций HashMap, если на верхнем уровне HashMap партиционирован, то в оптимальном случае, доступ к коллекции/данным осуществляется сразу несколькими потоками/CPU, истинно параллельно. Поэтому они и concurrent collection.

Алгоритмы "обычных" коллекций и concurrent коллекций - совершенно разные.

p.s. точных детали реализации concurrent коллекций из данного пакета в java - не помню (про HashMap). Плюс стандартные java'вские реализации часто неэффективны. Но всегда можно заюзать сторонние коллекции с нужными алгоритмами/характеристиками.

IMHO & AFAIK
чот вы не то говорите )) причем тут синхронайз и мессаджбейсд? никаких синхронайзов вообще. у нас есть продусеры есть консумеры. если продусеров много а консумеров мало добавляем консумеров. и дальше сколь угодно далеко пока то что исполняет роль брокера не помрет. а когда помрет мы и его добавим.
зачем работать с мутабельными объектами вообще? конечно шаред мутабл обжект так или иначе вы будете и обязаны и должны каким-то образом использовать такими вот "конкурентными" инструментами. а если у нас их вообще нет? то и инструменты не нужны.

насчет разноса когда на микроблоки и общение через посредника - да, это будет оверхед. но это временно.. ну сколько у вас там потоков параллельно ваша жвм вытянет? сильно больше чем количество ядер? нет. а представьте у вас чатик, где не 100 юзеров или 1000 или 10 000, а 10 миллионов? что вы там со своими коллекциями несчастными будете делать? да ничего.

я ничего против канкарренси не имею, но всё же мне кажется, что это всё еще достаточно низкий уровень абстракции, чтоб им бездумно затыкать все дыры перформанса. ну и да.. юзать мутабельные объекты плохо, расшаренные объекты промеж потоков тоже плохо. и имхо, это надо делать только тогда, когда иначе уже совсем уж никак.
...
Рейтинг: 0 / 0
02.11.2018, 15:25
    #39727274
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
andreykaTконсумеров мало добавляем консумеров

И как РАЗНЫЕ консумеры будут из ОДНОЙ коллекции результат возврашать?
Какой тип коллекции будете использовать, если консумеров много?

Код пожалуйста. Есть обработчик Web-запросов, нужна ОБЩИЙ HashMap со списком текущих пользователей.

Web-запрос просто проверяет наличие user'а в HashMap и возврашает Ok или Error (нет такого пользователя)

Какой использовать тип коллекции?
Как это будет выглядить в Вашем случае "ивент басед"?

Можно, конечно, самому делать шардинг (разные консумеры с шарднутыми очередями + протокол синхронизации + протокол единого интератора + черти что еще), но зачем? Когда есть полно стандартных реализаций concurent HashMap.

Мало того, сама очередь сообщений между продюсерами и консумерами, скорее всего, будет сделана на java.concurent.LinkedQueue. Т.е. получается масло-масленное. Дабы не использовать java.concurrent будем городить "евент басд" велосипед, который все равно через java.concurent.LinkedQueue работает.
...
Рейтинг: 0 / 0
02.11.2018, 15:54
    #39727298
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Leonid Kudryavtsev, да вроде ringbuffer - старье. Вон, лет 5 как был хайп по дисраптору - все через проитивные (читай - волатильные) типы сделано - фиксированный буфер, у продюсеров и консьюмеров только счетчики..
...
Рейтинг: 0 / 0
02.11.2018, 16:25
    #39727308
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Leonid KudryavtsevandreykaTконсумеров мало добавляем консумеров

И как РАЗНЫЕ консумеры будут из ОДНОЙ коллекции результат возврашать?
Какой тип коллекции будете использовать, если консумеров много?

Код пожалуйста. Есть обработчик Web-запросов, нужна ОБЩИЙ HashMap со списком текущих пользователей.

Web-запрос просто проверяет наличие user'а в HashMap и возврашает Ok или Error (нет такого пользователя)

Какой использовать тип коллекции?
Как это будет выглядить в Вашем случае "ивент басед"?

Можно, конечно, самому делать шардинг (разные консумеры с шарднутыми очередями + протокол синхронизации + протокол единого интератора + черти что еще), но зачем? Когда есть полно стандартных реализаций concurent HashMap.

Мало того, сама очередь сообщений между продюсерами и консумерами, скорее всего, будет сделана на java.concurent.LinkedQueue. Т.е. получается масло-масленное. Дабы не использовать java.concurrent будем городить "евент басд" велосипед, который все равно через java.concurent.LinkedQueue работает.
если у вас стоит скажем лоадбалансёр и некоторое количество инстансов, обрабатывающих хттп запросы в какой хашмапе вы это всё собрались хранить? :) будете хранить в хашмапе первого инстанса - второй об этом будет ни сном ни духом. и наоборот. а если у вас этих инстансов с десяток крутится?
ответ прост - никакой хашмап я не буду использовать ибо это невозможно. я заюзаю редиса. и буду использовать редис в качестве мапы для хранения КВ данных и все инстансы будут бежать туда чтоб посмотреть кто из юзеров залогинен а кто нет.
будет мало производительности одного редиса - добавлю еще один. и так до бесконечности.
...
Рейтинг: 0 / 0
02.11.2018, 16:29
    #39727310
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.util.concurrent.*, concurrent collections
Озверинда вроде ringbuffer - старье
Так Circle Ring Buffer и есть один из основных/простейших concurrent lock free алгоритмов.
Точнее даже вообще wait free (некоторые реализации).

Озверинвсе через проитивные (читай - волатильные) типы сделано

Ну дык concurrent коллекции так и делают. Вот эти алгортимы как раз в java.concurrent и сделаны
Об том и речь. Что java.concurrent (в основном) это СОВЕРШЕННО другие алгоритмы, чем "обычные" коллекции + synchronized

Весь флейм с высказывания "инструмент из пакета канкарренси можно повторить на обычных синках вейтах и нотифаях" и начался. Т.к. коллекции другие и алгоритмы совершенно другие.

Озверин у продюсеров и консьюмеров только счетчики
Фразу "только счетчики" не понял

У всех алгоритмов, "только ячейки в памяти". Другое дело, как коллизии разрешать. Когда несколько разных потоков (CPU) к одной "ячейки в памяти" (счетчику) получить доступ хотят. Можно через synchronized, можно через различные lock free алгоритмы (отслеживать коллизии и разбираться с результатом коллизий)

Ну а дальше, еще этот lock free алгоритм корректно закодироваь. Выравние по строкам кэша и прочее
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / java.util.concurrent.*, concurrent collections / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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