powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / java concurrency and multithreading
102 сообщений из 102, показаны все 5 страниц
java concurrency and multithreading
    #39240908
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня такой вопрос к гуру: как часто вы пользуетесь и пользуетесь ли вообще такими вещами при написании скажем, веб-проектов под фреймворками спринг.
вещи: read-write locks, semaphores, threadqueues, atomics, executors?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39240914
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTскажем, веб-проектов под фреймворками спрингВ 95% проблема многопоточности решается средствами Application Server'а. (5% - Atomics и конкурентный доступ - (: )
имхо
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39240920
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

спасибо, а ВНЕ приложений, что со спрингом и апп.серверами работают?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39240923
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTа ВНЕ приложений, что со спрингом и апп.серверами работают?Если речь о клиентах AppServer'а, то там можно использовать все что угодно (при наличии соот-щих возможностей).
Клиентом может быть как тонкий/толстый, так и другой AppServer.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39240924
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

честно говоря, не совсем понял ну ладно. тогда такой вопрос: ин риал круел лайф вы часто используете при работе с многопоточкой те методы и классы, что я сверху написал?

и еще короткий такой: а что именно апп-сервер предоставляет для работы с многопоточкой? просто например, глядя на типовое спринговое приложение, я понимаю, что там проблемы с многопоточкой решены (ну или почти решены) по бОльшей части тем, что выбран правильный дизайн приложения в целом - слои, каркас и т.п. т.е. ситуаций, где несколько тредов могут "поругаться" сведены к минимуму. там больше внимания уделяется работе с базой чем с этим..
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39240931
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTин риал круел лайф вы часто используете при работе с многопоточкой те методы и классы, что я сверху написал?andreykaTа что именно апп-сервер предоставляет для работы с многопоточкой?В Full Profile - EJB (@Schedule), Web Profile - Quartz Scheduler (либо поднять что-нибудь свое на базе *ExecutorService, но я стараюсь избегать этого)
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39240985
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За весь год потребность возникала всего дважды, использовал ReentrantLock и Semaphore. Так что практически не сталкиваюсь, хотя, наверное, хотелось бы.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39240999
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTу меня такой вопрос к гуру: как часто вы пользуетесь и пользуетесь ли вообще такими вещами при написании скажем, веб-проектов под фреймворками спринг.
вещи: read-write locks, semaphores, threadqueues, atomics, executors?
Rwlock - пару раз
Семафоры - один
Thread queue - не знаю что это
Атомики и executors - часто
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241561
it_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreykaTкак часто вы пользуетесь и пользуетесь ли вообще такими вещами при написании скажем, веб-проектов под фреймворками спринг.
вещи: read-write locks, semaphores, threadqueues, atomics, executors?
хм, executors нужны, чтобы создавать и переиспользовать (в случае пулов) потоки.
остальные вещи - примитивы синхронизации.

я не спец в веб-проектах и фреймворке спринг, но:
не важно, сами вы создаете потоки, с использованием executors или фреймворк создает их за вас, вам необходимо позаботиться о том, чтобы эти потоки имели согласованный доступ к "shared mutable state".
другой вопрос, как спринг или другие фреймворки могут в этом помочь.

если вы делаете это сами, то вам необходимы эти примитивы синхронизации, volatile, atomicXXX, reentrant locks, rw locks и т.п.

все зависит от задачи..
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241642
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
it_devвам необходимо позаботиться о том, чтобы эти потоки имели согласованный доступ к "shared mutable state"
Фишка в том, что в бОльшей части кровавого энтерпрайза шаред мутейбл стейт представляется в виде РСУБД и, вероятно, слоев кэша, который тоже уже написан за вас. А на обычном прикладном уровне он встречается крайне редко.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241661
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АЛЛИЛЛУЯ! наконец то кто то это сказал.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTАЛЛИЛЛУЯ! наконец то кто то это сказал.
Так ты пришел сюда тонко всех потроллить? :)
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241693
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonandreykaTАЛЛИЛЛУЯ! наконец то кто то это сказал.
Так ты пришел сюда тонко всех потроллить? :)
Нет, что ты. я просто подсознательно понимал что где-то собака порылась, но понять не мог как это выразить. Просто после мешка собесов у меня сложилось ощущение, что все эти тонкости мультитрединга со всякими тред-кью, семафорами и прочими ништяками пульзуют абсолютно все, даже уборщицы у меня в офисе. Все , но только не я. Я же смотрел как баран и не мог понять куда же тут реальный мультитрединг то прикрутить можно? (речь не об екзекуторах и кронах) А тут вон оно чо михалыч. Оказывается это у всех так. :)
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241694
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTНет, что ты. я просто подсознательно понимал что где-то собака порылась, но понять не мог как это выразить. Просто после мешка собесов у меня сложилось ощущение, что все эти тонкости мультитрединга со всякими тред-кью, семафорами и прочими ништяками пульзуют абсолютно все, даже уборщицы у меня в офисе. Все , но только не я. Я же смотрел как баран и не мог понять куда же тут реальный мультитрединг то прикрутить можно? (речь не об екзекуторах и кронах) А тут вон оно чо михалыч. Оказывается это у всех так. :)
На собесах пытаются оценить твой опыт. И если с основными разделами Java Core можно "проскочить"
или пустить пыль в глаза то с мультитредингом ситуация другая. Я к примеру вообще не знаю даже
примерных список quiz или тестов которые нужно пройти для сабжа. Скорее всего их не существует.
Поэтому корректный ответ на один из 100500 вопросов по МТ - это признак зрелости. Вот и все.
А будешь ли ты их использовать в проекте - ХЗ. На фоне веб-кодинга и коробочных фреймворков
мультипоточность редко выходит наружу.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241717
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonandreykaTАЛЛИЛЛУЯ! наконец то кто то это сказал.
Так ты пришел сюда тонко всех потроллить? :)
andreykaT - дружбан Вади
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241718
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanmaytonпропущено...

Так ты пришел сюда тонко всех потроллить? :)
andreykaT - дружбан Вади

Нет. Я его антагонист. ) он любит аут.принтлном строки с тегами в браузер через 80-й порт отправлять, а я люблю спринг и хибер.

авторНа собесах пытаются оценить твой опыт. И если с основными разделами Java Core можно "проскочить"
или пустить пыль в глаза то с мультитредингом ситуация другая. Я к примеру вообще не знаю даже
примерных список quiz или тестов которые нужно пройти для сабжа. Скорее всего их не существует.
Поэтому корректный ответ на один из 100500 вопросов по МТ - это признак зрелости. Вот и все.
А будешь ли ты их использовать в проекте - ХЗ. На фоне веб-кодинга и коробочных фреймворков
мультипоточность редко выходит наружу.
да как сказать.. С одним товарищем у меня был собес. там вспомнили наверное вообще всё из МТ, я на часть ответил. в т.ч. на всякие трайлоки, рв-локи, семафорчики екзекуторы, атомики, волатайлы, калаблы и т.п. его фидбак - "не знает МТ". да, каюсь - так и не понял как тред-кью пользоваться. Для меня это, видимо, как физика черных дыр. Иногда по вечерам Браина Гоеца перечитываю )
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241725
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT С одним товарищем у меня был собес. там вспомнили наверное вообще всё из МТ, я на часть ответил. в т.ч. на всякие трайлоки, рв-локи, семафорчики екзекуторы, атомики, волатайлы, калаблы и т.п. его фидбак - "не знает МТ". да, каюсь - так и не понял как тред-кью пользоваться. Для меня это, видимо, как физика черных дыр. Иногда по вечерам Браина Гоеца перечитываю )
Ваш интервьюер не ошибся. Ведь в Java нет никаких Thread Queue, про которые вы так настойчиво пишете.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39241729
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczandreykaT С одним товарищем у меня был собес. там вспомнили наверное вообще всё из МТ, я на часть ответил. в т.ч. на всякие трайлоки, рв-локи, семафорчики екзекуторы, атомики, волатайлы, калаблы и т.п. его фидбак - "не знает МТ". да, каюсь - так и не понял как тред-кью пользоваться. Для меня это, видимо, как физика черных дыр. Иногда по вечерам Браина Гоеца перечитываю )
Ваш интервьюер не ошибся. Ведь в Java нет никаких Thread Queue, про которые вы так настойчиво пишете.
тред блокинг куеуе. пардон. уточняю.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242118
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTmaytonпропущено...

Так ты пришел сюда тонко всех потроллить? :)
Нет, что ты. я просто подсознательно понимал что где-то собака порылась, но понять не мог как это выразить. Просто после мешка собесов у меня сложилось ощущение, что все эти тонкости мультитрединга со всякими тред-кью, семафорами и прочими ништяками пульзуют абсолютно все, даже уборщицы у меня в офисе. Все , но только не я. Я же смотрел как баран и не мог понять куда же тут реальный мультитрединг то прикрутить можно? (речь не об екзекуторах и кронах) А тут вон оно чо михалыч. Оказывается это у всех так. :)
Дак кто ж вас знает, куда вы на собеседования ходили, может там и нет никакого энтерпрайза, а все стильно, модно, молодежно и действительно нужен конкаренси.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242136
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стартап чтоль какой? или решили свой фреймворк с нуля написать? :)
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242144
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах )))
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242186
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTстартап чтоль какой? или решили свой фреймворк с нуля написать? :)
вы вообще о чем?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242231
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirandreykaTстартап чтоль какой? или решили свой фреймворк с нуля написать? :)
вы вообще о чем?
Сам с собой разговаривает.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242388
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах )))
Нее. у вас просто опыта маловато в конкуренси - вы нам не подходите (зы если что это шутка, разумеется я так о Вас не думаю).

Блакович, я к тому сказал, что если не энтерпрайз (где как выяснилось требования к распараллеливанию потоков минимальны), то наверное там они какие-то аналитические штуки пишут или собственные фреймворки на замену спрингу и хиберу

А кстати, недавно с одними товарищами разговаривал и сказал что вот есть приложение там единомоментно в среднем в районе 20-ти потоков крутится. они так типа фии. так мало и вообще несерьезно. А по факту 200 потоков это 10 000 сессий. 20 потоков это 1000 сессий. приложение на тысячу сессий это мало?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242399
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTА кстати, недавно с одними товарищами разговаривал и сказал что вот есть приложение там
единомоментно в среднем в районе 20-ти потоков крутится. они так типа фии. так мало и
вообще несерьезно. А по факту 200 потоков это 10 000 сессий. 20 потоков это 1000 сессий.
приложение на тысячу сессий это мало?
Это - учёт попугаев, мартышек и слонёнков. Что толку в 200 потоках если они в sleeping к примеру или ждут i/o ?
Наплодить много потоков - дурное-дело-не-хитрое. А вот обеспечить пропускную способность системы
в количестве бизнес-операций на хост или на сетевой интерфейс или на 1 апп-сервер - вот он уровень
синьорити. И не меряется он в количестве потоков.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242408
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так 200 потоков это томкат создает. Грубо говоря двести человек послали гет запрос - вот тебе и 200 потоков. Разумеется, так однозначно судить без вводных - это пальцем в небо. тут я с Вами конечно же согласен, уважаемый.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242531
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTТак 200 потоков это томкат создает. Грубо говоря двести человек послали гет запрос - вот тебе и 200 потоков. Разумеется, так однозначно судить без вводных - это пальцем в небо. тут я с Вами конечно же согласен, уважаемый.

ну не 200, там потоков 20 в тредпуле
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242547
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonandreykaTА кстати, недавно с одними товарищами разговаривал и сказал что вот есть приложение там
единомоментно в среднем в районе 20-ти потоков крутится. они так типа фии. так мало и
вообще несерьезно. А по факту 200 потоков это 10 000 сессий. 20 потоков это 1000 сессий.
приложение на тысячу сессий это мало?
Это - учёт попугаев, мартышек и слонёнков. Что толку в 200 потоках если они в sleeping к примеру или ждут i/o ?
Наплодить много потоков - дурное-дело-не-хитрое. А вот обеспечить пропускную способность системы
в количестве бизнес-операций на хост или на сетевой интерфейс или на 1 апп-сервер - вот он уровень
синьорити. И не меряется он в количестве потоков.

Подтверждаю.

Мне сейчас вычислительную задачу надо распараллелить. Так у меня один запрос раскладывается в 20-60 потоков на "вычислителе" + столько же потоков на модуле агригации и кэша ==> примерно 100 потоков в ThreadPool'е извлекающем данные.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242556
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сколь-вом пользователей это вообще никак не связано, т.к. ничто не мешает пользователей на разным VM отправлять (балансировщик нагрузки). В разумных приделах конечно.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39242596
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никandreykaTТак 200 потоков это томкат создает ...ну не 200, там потоков 20 в тредпуле
Код: plaintext
Ну или JMeter.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39318600
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах )))
Пишут что лучше использовать ReentrantLock, стильно, модно, молодёжно, и работает быстрее чем synchronized.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39318627
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoLeonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах )))
Пишут что лучше использовать ReentrantLock, стильно, модно, молодёжно, и работает быстрее чем synchronized.
Уже давно сравнялось вроде как. Да и в принципе это такой subject to change. Надо использовать то что проще и лучше подходит к задаче. Если нет надобности именно в ReenTrant незачем и связываться
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39318645
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никXDiaBLoпропущено...

Пишут что лучше использовать ReentrantLock, стильно, модно, молодёжно, и работает быстрее чем synchronized.
Уже давно сравнялось вроде как. Да и в принципе это такой subject to change. Надо использовать то что проще и лучше подходит к задаче. Если нет надобности именно в ReenTrant незачем и связываться
То есть такие картинки уже можно игнорировать?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39318694
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потестировал только что корявенько, похоже и правда разницы в быстродействии не заметно. Наверное я старья какого-то начитался
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39318701
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoТо есть такие картинки уже можно игнорировать?
Их надо понимать, а точнее баграунд (в вашем случае спяртан за балым листом :) ).

Synchronized изначально заточен на низкую конкуренцию, Reentrant на высокую.
В соответствии с тем, что будет происходить и стоит выбирать инструмент.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39318703
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В каких то случаях и самодельный спин на Атомиках имеет смысл. :)
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39318710
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoПотестировал только что корявенько, похоже и правда разницы в быстродействии не заметно. Наверное я старья какого-то начитался

Наверное) Оно уже на 1.6 по-моему почти выровнялось. В любом случае, никто никаких гарантий не дает, и все может меняться от версии к версии. Так что прежде чем что-то делать, всегда нужно мерять, а такие статьи хоть и полезны для общего бэкграунды, но очень быстро устаревают
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39318911
guest2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTBlazkowiczпропущено...

Ваш интервьюер не ошибся. Ведь в Java нет никаких Thread Queue, про которые вы так настойчиво пишете.
тред блокинг куеуе. пардон. уточняю.

Такой коллекции в JCF тоже нет. Самое близкое по названию - Blocking Queue https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319094
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос в чем плюс реентрант лока тогда? только не надо рассказывать про размазывание локов по коду. это бэд прэкстис за который надо нещадно карать. в любом случае ты эти локи опять-таки упаковываешь в трайкач и на выходе получается... получается.. такая же фигня как и блок синхронайзд )
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319264
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я забил на всю эту конкуренси, мемори модел и т.п. мусор, только мозги марать.

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

Оно мало того что никогда не нужно, еще и вредно, изучение ущербных абстракций и подходов. Кто реально хочет крутых алгоритмов поизучать - есть всякие Хаскели, Си, Ерланги и т.п.чем разбираться в сломанных абстракциях многопоточности жавы.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319277
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...а если еще и с фреймворками работаешь то вообще лажа выходит ))) там как правило, свой инструментарий для потоков.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319394
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я подумал что зачем-то же в вакансиях пишут про многопоточность, и говорят что на собеседованиях могут и спрашивать про такое. К тому же сервлеты вроде как требуют понимания многопоточности.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319412
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrвопрос в чем плюс реентрант лока тогда?
Нет необходимости увязывать блокировку с блоком кода.
Например, можно сделать захват блокировки по вызову одного метода и высвобождение по вызову другого. Что, конечно, потребует более аккуратного обращения в связи с возможной утечкой блокировки. :)
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319503
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во всяких спрингах и прочих хибернейтах и правда, примитивы синхронизации практически не нужны.

НО - на дворе 21 век и асинхронные приложения. Многопоточность снова более чем актуальна.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319560
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfВо всяких спрингах и прочих хибернейтах и правда, примитивы синхронизации практически не нужны.

НО - на дворе 21 век и асинхронные приложения. Многопоточность снова более чем актуальна.
Во всяком случае в вакансиях порой проскакивает многопоточность. И кажется мне, что это всё чаще происходит.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319572
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> на дворе 21 век и асинхронные приложения

Лапша из коллбеков и евентов? Типа как в ноде.жс? Это деградация а не 21 век. 21 век это скорей GPU, мильены легких процессов, и т.п.
Асинхронность в жаве - это костыль призванный компенсировать неспособность жавы и JVM эффективно работать с легкими процессами.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319594
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319614
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял что вы хотели сказать ссылками.

В одном случае я использую тупой обычный код и мильен легких процессов (Erlang), а платформа за меня сама разбирается как все это сделать эффективным.

Во втором случае, из-за того что платформа не может решить свою задачу, она перекладывается на плечи программиста, и ему приходится использовать всю эту событийную лапшу, ссылки на которую вы привели.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319625
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,

Ссылками ничего не скажешь, сказать только можно текстом по этим ссылкам. Они описывают современный подход к разработке асинхронных программ - в котором нет коллбэков и "событийной лапши". Далее выбор за вами - или читать, или игнорировать. Ключевые слова: js promise, async await, scala future, actor model.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319648
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfСсылками ничего не скажешь, сказать только можно текстом по этим ссылкам. Они описывают современный подход к разработке асинхронных программ - в котором нет коллбэков и "событийной лапши". Далее выбор за вами - или читать, или игнорировать. Ключевые слова: js promise, async await, scala future, actor model.
Раскройте, пожалуйста, мысль. Куда из Future пропал колбэк? Ключевое слово: continuation.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319696
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

вышенаписанное не имеет отношения к java.util.concurrent.Future
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39319945
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
событийная модель у меня всё чаще вызывает ощущение что тупо вернули когда то похеренный оператор гоу-ту в бейсике образца 1978-го года. и назвали его ивентом. а суть та же ))
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320010
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrсобытийная модель у меня всё чаще вызывает ощущение что тупо вернули когда то похеренный оператор гоу-ту в бейсике образца 1978-го года. и назвали его ивентом. а суть та же ))
Да многое можно назвать синтаксическим сахаром, однако же так удобнее, чем совсем без сахара, в машинных кодах.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320025
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateАсинхронность в жаве - это костыль призванный компенсировать неспособность жавы и JVM эффективно работать с легкими процессами.
А что такое этот ваш "легкий процесс"? Попахивает, что это просто маркетинговый bullshit
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320113
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,

наверное, имеется в виду линуксовый fork(). Но это лет 20 как не модно уже - все современные демоны используют потоки и селекторы.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320185
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В контексте исходного вопроса топика мне очень нравится начало доклада Руслана Черемина на одном из JPoint [spoiler]
YouTube Video
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320199
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirТак как нет спроса на такое количество специалистов, знающих это область на высоком уровне, для подавляющего большинства задач достаточно уметь правильно проставлять synchronized и volatile и на этом потребности заканчиваются.
А, ну на таком то уровне надеюсь я уже изучил. Большинство работодателей получается не станет спрашивать про модель памяти Java, happens-before, и всякие там семафоры?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320273
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLojust_vladimirТак как нет спроса на такое количество специалистов, знающих это область на высоком уровне, для подавляющего большинства задач достаточно уметь правильно проставлять synchronized и volatile и на этом потребности заканчиваются.
А, ну на таком то уровне надеюсь я уже изучил. Большинство работодателей получается не станет спрашивать про модель памяти Java, happens-before, и всякие там семафоры?
Ну модель памяти в Java ничего общего с Subj не имеет и понимать разбиение heap'а на области - imho желательно, что бы совсем уж говнокод жрущий по 1-2 Gb памяти не писать.

С happens before - я вообще подозреваю, что людей которые в этом разбираются очень мало. Т.к. например лично я, вообще понять не могу чем store-store порядок от store-load отличается ))) И зачем при наличие store-load синхронизации народ еще в обязательно порядке store-store впихивает )))

Нафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile).

IMHO & AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320286
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНу модель памяти в Java ничего общего с Subj не имеет и понимать разбиение heap'а на области - imho желательно, что бы совсем уж говнокод жрущий по 1-2 Gb памяти не писать.
Ага, как же, не имеет. А почему-то мне пришлось в процессе изучения конкаренси неоднократно на это натыкаться.

Leonid KudryavtsevС happens before - я вообще подозреваю, что людей которые в этом разбираются очень мало. Т.к. например лично я, вообще понять не могу чем store-store порядок от store-load отличается ))) И зачем при наличие store-load синхронизации народ еще в обязательно порядке store-store впихивает )))
Когда смотришь видеолекцию про это, вроде с трудом, но понятно. Зато в голове как-то не застревает.
Leonid KudryavtsevНафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile).
Про волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл, плюс отменяет кеширование переменной, чтобы все потоки актуальное значение читали. Ну и соответственно устанавливает хэппенс-бефо между записью и дальнейшими чтениями. Кроме того, когда поток читает такую переменную, он видит не только последнее значение переменной, но и также побочные эффекты кода который привёл к изменению.
Вроде всё, или ещё что-то нужно про это знать?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320288
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНу модель памяти в Java ничего общего с Subj не имеет и понимать разбиение heap'а на области - imho желательно, что бы совсем уж говнокод жрущий по 1-2 Gb памяти не писать.
ой ли, JMM как раз имеет непосредственное отношение к concurrency


Leonid KudryavtsevС happens before - я вообще подозреваю, что людей которые в этом разбираются очень мало.
Я бы уточнил, кто разбирается в этом на должном уровне

Leonid KudryavtsevТ.к. например лично я, вообще понять не могу чем store-store порядок от store-load отличается ))) И зачем при наличие store-load синхронизации народ еще в обязательно порядке store-store впихивает )))
имхо, это Вы уже куда-то на уровень реализации полезли

Leonid KudryavtsevНафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile).
не, здесь как раз все просто, описывается формулой atomic = volatile + CAS
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320297
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoПро волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл
Верно, хотя я бы не конкретизировал про long/double, просто добавляет атомарность

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

XDiaBLoНу и соответственно устанавливает хэппенс-бефо между записью и дальнейшими чтениями.
Верно

XDiaBLoКроме того, когда поток читает такую переменную, он видит не только последнее значение переменной, но и также побочные эффекты кода который привёл к изменению.
Совершенно не факт, что он видит последнее значение переменной, но если он увидел какое то значение, то гарантируется, что он увидит все другие изменения выполненные потоком выполнявшим запись этого значения, которые были выполнены до момента записи в эту переменную.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320302
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirСовершенно не факт, что он видит последнее значение переменной
Так у Оракла в туториале написано. Только сегодня этот момент читал. Если врут, ну это печально.
just_vladimirно если он увидел какое то значение, то гарантируется, что он увидит все другие изменения выполненные потоком выполнявшим запись этого значения, которые были выполнены до момента записи в эту переменную.
Вот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320304
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirне, здесь как раз все просто, описывается формулой atomic = volatile + CAS
Просто хотелось бы пример корректного кода __чисто__ на volatile. Например аналог банального

AtomicInteger.inc

)))

А пока мое IMHO volatile практически бесполезное ключевое слово. О котором достаточно просто знать, что оно есть. (да и то не обязательно). Т.к. на практике или synchronized или Atomic или что-то более сложное для конкретных задач.

имхо, это Вы уже куда-то на уровень реализации полезли
А без этого понять работу кода one producer - one consumer queue vs ConcurrentLinkedQueue на мой взгляд совсем не реально )))

По этому все это "уровень реализации" и наверное достаточно просто иметь общее представление и уметь пользоваться библиотеками.

Ну и например ConcurrentLinkedQueue от гонок в бизнес логике не защищает. Т.ч. я бы сказал, что любое использование чего либо кроме synchronized в 99% "полезть на уровень реализации" с возможностью словить плохо тестируемые гонки в коде.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320305
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoВот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции?
На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно.

На других архитектурах, это берет на себя JVM.

AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320309
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLojust_vladimirСовершенно не факт, что он видит последнее значение переменной
Так у Оракла в туториале написано. Только сегодня этот момент читал. Если врут, ну это печально.
Можно ссылочку?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320310
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevXDiaBLoВот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции?
На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно.
AFAIK

Вот уже второй раз ошибаешься :)

Если есть два разных кэша (например два проца), то записав данные в память можно, конечно, всегда требовать, чтобы эта же строка, если она есть к кэша другуого процессора, обновилась, но это ОЧЕНЬ дорого стоит.
Для этого и есть волотайл как частный случай барьера.
Т.е. эфективная программа старается лишний раз кэш не сбрасывать. А то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320312
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirXDiaBLoпропущено...

Так у Оракла в туториале написано. Только сегодня этот момент читал. Если врут, ну это печально.
Можно ссылочку?
Да конечно, хотя ищется легко: https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html
авторWhat's more, it also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile , but also the side effects of the code that led up the change.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320316
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominLeonid Kudryavtsevпропущено...

На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно.
AFAIK

Вот уже второй раз ошибаешься :)

Если есть два разных кэша (например два проца), то записав данные в память можно, конечно, всегда требовать, чтобы эта же строка, если она есть к кэша другуого процессора, обновилась, но это ОЧЕНЬ дорого стоит.
Для этого и есть волотайл как частный случай барьера.
Т.е. эфективная программа старается лишний раз кэш не сбрасывать. А то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти.
Так я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320326
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoТак я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение?
Да. Хотя это я плохо понимаю ))). Запись в volatile переменную приводит к срабатыванию барьера.

Более "странно" на мой взгляд, что в конструкторе final поля тоже являются барьером. Т.ч. если у тебя immutable класс, где все поля final, то его можно безопасно передавать между потоками. А вот, если он не immutable (mutable) то можно словить проблемы. Вроде сейчас Java-гуру обсуждают, не стоит ли сам new сделать барьером (на мой взгляд стоит, а то хрень разберешь современное поведение) но вроде в JVM 1.8 этого еще нет.

AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320327
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominВот уже второй раз ошибаешься :)
Можно ссылку?

https://en.wikipedia.org/wiki/MESIF_protocol
Alexey TominА то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти.
Одно другому не мешает.
false-sharing как раз и есть проблема из-за cache conerence. IMHO
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320338
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevjust_vladimirне, здесь как раз все просто, описывается формулой atomic = volatile + CAS
Просто хотелось бы пример корректного кода __чисто__ на volatile. Например аналог банального
AtomicInteger.inc
)))
А пока мое IMHO volatile практически бесполезное ключевое слово. О котором достаточно просто знать, что оно есть. (да и то не обязательно). Т.к. на практике или synchronized или Atomic или что-то более сложное для конкретных задач.
getAndIncrement на чистом volatile вы не реализуете, т.к. это требует CAS.

Зачем нужен volatile - здесь просто, допустим у вас есть singleton глобальная static переменная, но которая не volatile, дак вот в этой ситуации у вас нет никакой гарантии, что разные потоки работающие с этой переменной будут видеть действия друг друга, у каждого потока может существовать свой лунапарк с блекджеком и мир, со своей переменной и он будет видеть только свои изменения.


XDiaBLojust_vladimirпропущено...
Можно ссылочку?
Да конечно, хотя ищется легко: https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html
авторWhat's more, it also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile , but also the side effects of the code that led up the change.
Я не вижу здесь указания на то, что при чтении мы обязаны увидеть именно последнее значение, которое было туда записано. Но вот как только он его увидит, вот тогда уже:
авторbut also the side effects of the code that led up the change
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320343
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,


автор latest change to the volatile
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320347
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про то, что не стоит пытаться опуститься на уровень реализации, а нужно постичь дзен JMM можно читать у Шипилева https://shipilev.net/blog/2016/close-encounters-of-jmm-kind/
Впрочем я сколько раз не пытался осилить, так до конца и не осилил))
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320349
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
сойдемся на том, что мы немного по разному понимаем английский язык :-)
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320353
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirПро то, что не стоит пытаться опуститься на уровень реализации, а нужно постичь дзен JMM можно читать у Шипилева https://shipilev.net/blog/2016/close-encounters-of-jmm-kind/
Впрочем я сколько раз не пытался осилить, так до конца и не осилил))
Спасибо за ссылку.
just_vladimirXDiaBLo,
сойдемся на том, что мы немного по разному понимаем английский язык :-)
А что там понимать то?
автор latest change to the volatile
Самое последнее изменение в перменчивой переменной :)
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320358
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirЗачем нужен volatile - здесь просто, допустим у вас есть singleton глобальная static переменная, но которая не volatile, дак вот в этой ситуации у вас нет никакой гарантии, что разные потоки работающие с этой переменной будут видеть действия друг друга, у каждого потока может существовать свой лунапарк с блекджеком и мир, со своей переменной и он будет видеть только свои изменения.

Ну Singleton тоже на volatile не реализовать )))
А при добавлении synchronized volatile уже и не нужен.

AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320366
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется волатайл подходит тогда, когда нам не важно идёт ли запись одновременно с чтением, или нет. Ну пропустим мы значение, которое ещё по кешам не растеклось, а только ещё растекается. Однако не потратимся на дорогую синхронизацию, и получим нормальное целостное значение переменной.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320371
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoСамое последнее изменение в перменчивой переменной :)

авторit also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile, but also the side effects of the code that led up the change.

Я читаю, как "это так же означает, что поток читающий volatile переменную увидит не только последнее [видимое] изменение, но и все побочные эффекты, которые выполнил изменяющий код, перед изменением" в то время, как Вы читаете это, как "это так же означает, что поток читающий volatile переменную обязательное увидит самое последнее изменение этой переменной, а так же ... ".
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320375
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirXDiaBLoСамое последнее изменение в перменчивой переменной :)

авторit also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile, but also the side effects of the code that led up the change.

Я читаю, как "это так же означает, что поток читающий volatile переменную увидит не только последнее [видимое] изменение, но и все побочные эффекты, которые выполнил изменяющий код, перед изменением" в то время, как Вы читаете это, как "это так же означает, что поток читающий volatile переменную обязательное увидит самое последнее изменение этой переменной, а так же ... ".
Ну правильно, так как [видимое] это чисто ваши фантазии.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320377
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторthe latest
Значит "самое последнее", а не "последнее видимое".
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320392
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevjust_vladimirЗачем нужен volatile - здесь просто, допустим у вас есть singleton глобальная static переменная, но которая не volatile, дак вот в этой ситуации у вас нет никакой гарантии, что разные потоки работающие с этой переменной будут видеть действия друг друга, у каждого потока может существовать свой лунапарк с блекджеком и мир, со своей переменной и он будет видеть только свои изменения.

Ну Singleton тоже на volatile не реализовать )))
А при добавлении synchronized volatile уже и не нужен.
AFAIK
При добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320399
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevXDiaBLoТак я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение?
Да. Хотя это я плохо понимаю ))). Запись в volatile переменную приводит к срабатыванию барьера.

Как раз надо уйти от термина "срабатывание" и т.п.
Надо просто понять, что JMM это список обязательств . Нам не надо знать, как это будет реализовано.
Просто если мы прочитали волатайл, то мы видим все изменения, сделанные до записи этого волатайл в другом потоке.
Как это сделано на конкретной платформе знать не надо. Надо прост ознать, что это не бесплатно.

Leonid KudryavtsevБолее "странно" на мой взгляд, что в конструкторе final поля тоже являются барьером.

Не барьером. Надо понимать, что после выхода из конструктора все, кто получил (после выхода!) ссылку на этот объект- прочитают нужные значения final. Опять же - не надо понять, как это сделано. Надо понимать, что, во-первых, "утечка" this приведёт к разрушению этого счастья, а во-вторых это стоит мало (в отличии от волатайл).

PS: а кто-нибудь на jocker едет? Есть желающие развиртуализироваться?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320405
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее".
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320410
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirXDiaBLo,
да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее".

Мне кажется, что понимание этого (нет самого последнего) - самое сложно в JMM. Причём когда поймёшь- просто же всё.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320415
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominPS: а кто-нибудь на jocker едет? Есть желающие развиртуализироваться?
Летом все откладывал покупку билета, а сейчас жаба душит покупать за текущую цену...(
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320433
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirПри добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает.
Можно ссылку на статьи. И про кошерность.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320451
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да что тут обсуждать? синхронизированная переменная может заменить volatile, обратное неверно.

Вот только volatile дешевле, т.к. не требует захвата блокировки. Самое популярное применение - private volatile ImmutableState state;
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320461
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevjust_vladimirПри добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает.
Можно ссылку на статьи. И про кошерность.
Начать отсюда https://habrahabr.ru/post/248041/, а дальше по ссылкам из начала статьи
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320469
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirLeonid Kudryavtsevпропущено...

Можно ссылку на статьи. И про кошерность.
Начать отсюда https://habrahabr.ru/post/248041/, а дальше по ссылкам из начала статьи
Хотя наверное признаю, что не совсем прав, в том смысле, что в принципе с synchronized мы можем получить корректную реализацию и в этом Вы несомненно правы, но она будет не эффективной, а вот если мы захотим ее реализовать эффективно (=кошерно), то помимо synchronized нам потребуется volatile.

Собственно согласен вот с этим постом:
scfда что тут обсуждать? синхронизированная переменная может заменить volatile, обратное неверно.
Вот только volatile дешевле, т.к. не требует захвата блокировки. Самое популярное применение - private volatile ImmutableState state;
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320505
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoПро волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл, плюс отменяет кеширование переменнойvolatile не отменяет кэширование, volatile отменяет некоторые оптимизации, которые иначе могли бы быть сделаны.
Фактически, volatile это объявление: "значение переменной неподконтрольно текущему потоку".
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320533
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir.... а вот если мы захотим ее реализовать эффективно (=кошерно), то помимо synchronized нам потребуется volatile.
Ну а дальше до кучу статей на хабре, где народ пишет, что DCL не факт, что эффективнее просто synchronized ))) А в некоторых случаях, у людей вроде даже получалось дороже.

Т.ч. ссылка на статью как раз очень хороша. Кто-то сказал, что DCL в Singleton правильно - все не думая ломанулись так делать (паттерн! мать его ))) ). В результате, куча ошибок и непонятно какой выигрыш/проигрыш по performance.

Мое IMHO:

Leonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах )))

Если приложение может обработать от 500 до 2000 клиентских запросов в минуту, вряд ли, разница в скорости между synchronized коллекциями, ConcurrentLinkedQueue и/или single producer - single consumer queue будет заметна пользователям. IMHO & AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320535
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf....Самое популярное применение - private volatile ImmutableState state;
А что это такое?
можно ссылку, где об это почитать
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320537
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

java.util.concurrent.ConcurrentLinkedQueue - обратите внимание на кол-во volatile полей в этом классе.
В целом есть суровый труд the art of multiprocessor programming, который разбирает вопросы синхронизации с нуля и до вещей, которых даже на собеседованиях не спрашивают.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320538
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше я посмотрю, что нибудь более простое )))
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320542
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач )))
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320545
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач )))

вот это, простите, жесть. обозвать wait-free concurrent queue неэффективным... ну поищите попроще.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320549
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfLeonid KudryavtsevА "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач )))

вот это, простите, жесть. обозвать wait-free concurrent queue неэффективным... ну поищите попроще.
Я не говорил, что неэффективный. Я сказал, что есть более простые и эффективные для ряда применений.

Как раз эффективность и определяется тем, что в них намного меньше volatile и Atomic'ов

https://github.com/JCTools
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320554
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализация Circular Queue / RingBuffer значительно проще/эффективнее LinkedQueue.

В некоторых случаях, еще и функциональней. Например если нам нужен fixed размер queue и нужно отслеживать возможное превышение размера. Проверка по ConcurrentLinkedQueue.size, понятное дело, вообще ни в какие ворота не лезет.

IMHO & AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320662
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirXDiaBLo,
да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее".
Да я давно понял что вы имеете в виду. Я думал мы спорим по поводу перевода этой фразы с английского. А Вы между строк читаете. Так вот в документации следует писать точнее, без всяких "между строк". Думаю это недостаток той документации.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39321281
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile).
Так тут все просто. volatile более примитивен и дешевле, чем Atomic.

Volatile простой способ устанавить hb барьер. Атомик добавляет и прочие плюшки (проверку перед записью, инкремент и пр.). Дальше больше и дороже.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39321285
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНу Singleton тоже на volatile не реализовать )))
А не Singleton можно. Публикация объекта через volatile - способ гарантировать, что его конструктор отработает до того, как им попробуют воспользоваться.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39321298
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевПубликация объекта через volatile - способ гарантировать, что его конструктор отработает до того, как им попробуют воспользоваться.

Об этом не знал. Спасибо.
...
Рейтинг: 0 / 0
102 сообщений из 102, показаны все 5 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / java concurrency and multithreading
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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