|
|
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
у меня такой вопрос к гуру: как часто вы пользуетесь и пользуетесь ли вообще такими вещами при написании скажем, веб-проектов под фреймворками спринг. вещи: read-write locks, semaphores, threadqueues, atomics, executors? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 15:44 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTскажем, веб-проектов под фреймворками спрингВ 95% проблема многопоточности решается средствами Application Server'а. (5% - Atomics и конкурентный доступ - (: ) имхо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 15:51 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Usman, спасибо, а ВНЕ приложений, что со спрингом и апп.серверами работают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 16:23 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTа ВНЕ приложений, что со спрингом и апп.серверами работают?Если речь о клиентах AppServer'а, то там можно использовать все что угодно (при наличии соот-щих возможностей). Клиентом может быть как тонкий/толстый, так и другой AppServer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 16:35 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Usman, честно говоря, не совсем понял ну ладно. тогда такой вопрос: ин риал круел лайф вы часто используете при работе с многопоточкой те методы и классы, что я сверху написал? и еще короткий такой: а что именно апп-сервер предоставляет для работы с многопоточкой? просто например, глядя на типовое спринговое приложение, я понимаю, что там проблемы с многопоточкой решены (ну или почти решены) по бОльшей части тем, что выбран правильный дизайн приложения в целом - слои, каркас и т.п. т.е. ситуаций, где несколько тредов могут "поругаться" сведены к минимуму. там больше внимания уделяется работе с базой чем с этим.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 16:46 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTин риал круел лайф вы часто используете при работе с многопоточкой те методы и классы, что я сверху написал?andreykaTа что именно апп-сервер предоставляет для работы с многопоточкой?В Full Profile - EJB (@Schedule), Web Profile - Quartz Scheduler (либо поднять что-нибудь свое на базе *ExecutorService, но я стараюсь избегать этого) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 17:09 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
За весь год потребность возникала всего дважды, использовал ReentrantLock и Semaphore. Так что практически не сталкиваюсь, хотя, наверное, хотелось бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 20:25 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTу меня такой вопрос к гуру: как часто вы пользуетесь и пользуетесь ли вообще такими вещами при написании скажем, веб-проектов под фреймворками спринг. вещи: read-write locks, semaphores, threadqueues, atomics, executors? Rwlock - пару раз Семафоры - один Thread queue - не знаю что это Атомики и executors - часто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2016, 21:20 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTкак часто вы пользуетесь и пользуетесь ли вообще такими вещами при написании скажем, веб-проектов под фреймворками спринг. вещи: read-write locks, semaphores, threadqueues, atomics, executors? хм, executors нужны, чтобы создавать и переиспользовать (в случае пулов) потоки. остальные вещи - примитивы синхронизации. я не спец в веб-проектах и фреймворке спринг, но: не важно, сами вы создаете потоки, с использованием executors или фреймворк создает их за вас, вам необходимо позаботиться о том, чтобы эти потоки имели согласованный доступ к "shared mutable state". другой вопрос, как спринг или другие фреймворки могут в этом помочь. если вы делаете это сами, то вам необходимы эти примитивы синхронизации, volatile, atomicXXX, reentrant locks, rw locks и т.п. все зависит от задачи.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 16:55 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
it_devвам необходимо позаботиться о том, чтобы эти потоки имели согласованный доступ к "shared mutable state" Фишка в том, что в бОльшей части кровавого энтерпрайза шаред мутейбл стейт представляется в виде РСУБД и, вероятно, слоев кэша, который тоже уже написан за вас. А на обычном прикладном уровне он встречается крайне редко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 19:05 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
АЛЛИЛЛУЯ! наконец то кто то это сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 19:23 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTАЛЛИЛЛУЯ! наконец то кто то это сказал. Так ты пришел сюда тонко всех потроллить? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 19:39 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
maytonandreykaTАЛЛИЛЛУЯ! наконец то кто то это сказал. Так ты пришел сюда тонко всех потроллить? :) Нет, что ты. я просто подсознательно понимал что где-то собака порылась, но понять не мог как это выразить. Просто после мешка собесов у меня сложилось ощущение, что все эти тонкости мультитрединга со всякими тред-кью, семафорами и прочими ништяками пульзуют абсолютно все, даже уборщицы у меня в офисе. Все , но только не я. Я же смотрел как баран и не мог понять куда же тут реальный мультитрединг то прикрутить можно? (речь не об екзекуторах и кронах) А тут вон оно чо михалыч. Оказывается это у всех так. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 20:02 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTНет, что ты. я просто подсознательно понимал что где-то собака порылась, но понять не мог как это выразить. Просто после мешка собесов у меня сложилось ощущение, что все эти тонкости мультитрединга со всякими тред-кью, семафорами и прочими ништяками пульзуют абсолютно все, даже уборщицы у меня в офисе. Все , но только не я. Я же смотрел как баран и не мог понять куда же тут реальный мультитрединг то прикрутить можно? (речь не об екзекуторах и кронах) А тут вон оно чо михалыч. Оказывается это у всех так. :) На собесах пытаются оценить твой опыт. И если с основными разделами Java Core можно "проскочить" или пустить пыль в глаза то с мультитредингом ситуация другая. Я к примеру вообще не знаю даже примерных список quiz или тестов которые нужно пройти для сабжа. Скорее всего их не существует. Поэтому корректный ответ на один из 100500 вопросов по МТ - это признак зрелости. Вот и все. А будешь ли ты их использовать в проекте - ХЗ. На фоне веб-кодинга и коробочных фреймворков мультипоточность редко выходит наружу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 20:08 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
maytonandreykaTАЛЛИЛЛУЯ! наконец то кто то это сказал. Так ты пришел сюда тонко всех потроллить? :) andreykaT - дружбан Вади ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 20:58 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Usmanmaytonпропущено... Так ты пришел сюда тонко всех потроллить? :) andreykaT - дружбан Вади Нет. Я его антагонист. ) он любит аут.принтлном строки с тегами в браузер через 80-й порт отправлять, а я люблю спринг и хибер. авторНа собесах пытаются оценить твой опыт. И если с основными разделами Java Core можно "проскочить" или пустить пыль в глаза то с мультитредингом ситуация другая. Я к примеру вообще не знаю даже примерных список quiz или тестов которые нужно пройти для сабжа. Скорее всего их не существует. Поэтому корректный ответ на один из 100500 вопросов по МТ - это признак зрелости. Вот и все. А будешь ли ты их использовать в проекте - ХЗ. На фоне веб-кодинга и коробочных фреймворков мультипоточность редко выходит наружу. да как сказать.. С одним товарищем у меня был собес. там вспомнили наверное вообще всё из МТ, я на часть ответил. в т.ч. на всякие трайлоки, рв-локи, семафорчики екзекуторы, атомики, волатайлы, калаблы и т.п. его фидбак - "не знает МТ". да, каюсь - так и не понял как тред-кью пользоваться. Для меня это, видимо, как физика черных дыр. Иногда по вечерам Браина Гоеца перечитываю ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 21:05 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaT С одним товарищем у меня был собес. там вспомнили наверное вообще всё из МТ, я на часть ответил. в т.ч. на всякие трайлоки, рв-локи, семафорчики екзекуторы, атомики, волатайлы, калаблы и т.п. его фидбак - "не знает МТ". да, каюсь - так и не понял как тред-кью пользоваться. Для меня это, видимо, как физика черных дыр. Иногда по вечерам Браина Гоеца перечитываю ) Ваш интервьюер не ошибся. Ведь в Java нет никаких Thread Queue, про которые вы так настойчиво пишете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 21:19 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
BlazkowiczandreykaT С одним товарищем у меня был собес. там вспомнили наверное вообще всё из МТ, я на часть ответил. в т.ч. на всякие трайлоки, рв-локи, семафорчики екзекуторы, атомики, волатайлы, калаблы и т.п. его фидбак - "не знает МТ". да, каюсь - так и не понял как тред-кью пользоваться. Для меня это, видимо, как физика черных дыр. Иногда по вечерам Браина Гоеца перечитываю ) Ваш интервьюер не ошибся. Ведь в Java нет никаких Thread Queue, про которые вы так настойчиво пишете. тред блокинг куеуе. пардон. уточняю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 21:24 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTmaytonпропущено... Так ты пришел сюда тонко всех потроллить? :) Нет, что ты. я просто подсознательно понимал что где-то собака порылась, но понять не мог как это выразить. Просто после мешка собесов у меня сложилось ощущение, что все эти тонкости мультитрединга со всякими тред-кью, семафорами и прочими ништяками пульзуют абсолютно все, даже уборщицы у меня в офисе. Все , но только не я. Я же смотрел как баран и не мог понять куда же тут реальный мультитрединг то прикрутить можно? (речь не об екзекуторах и кронах) А тут вон оно чо михалыч. Оказывается это у всех так. :) Дак кто ж вас знает, куда вы на собеседования ходили, может там и нет никакого энтерпрайза, а все стильно, модно, молодежно и действительно нужен конкаренси. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 12:47 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
стартап чтоль какой? или решили свой фреймворк с нуля написать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 13:01 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Лично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 13:07 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTстартап чтоль какой? или решили свой фреймворк с нуля написать? :) вы вообще о чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 13:41 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirandreykaTстартап чтоль какой? или решили свой фреймворк с нуля написать? :) вы вообще о чем? Сам с собой разговаривает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 14:01 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах ))) Нее. у вас просто опыта маловато в конкуренси - вы нам не подходите (зы если что это шутка, разумеется я так о Вас не думаю). Блакович, я к тому сказал, что если не энтерпрайз (где как выяснилось требования к распараллеливанию потоков минимальны), то наверное там они какие-то аналитические штуки пишут или собственные фреймворки на замену спрингу и хиберу А кстати, недавно с одними товарищами разговаривал и сказал что вот есть приложение там единомоментно в среднем в районе 20-ти потоков крутится. они так типа фии. так мало и вообще несерьезно. А по факту 200 потоков это 10 000 сессий. 20 потоков это 1000 сессий. приложение на тысячу сессий это мало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 15:22 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTА кстати, недавно с одними товарищами разговаривал и сказал что вот есть приложение там единомоментно в среднем в районе 20-ти потоков крутится. они так типа фии. так мало и вообще несерьезно. А по факту 200 потоков это 10 000 сессий. 20 потоков это 1000 сессий. приложение на тысячу сессий это мало? Это - учёт попугаев, мартышек и слонёнков. Что толку в 200 потоках если они в sleeping к примеру или ждут i/o ? Наплодить много потоков - дурное-дело-не-хитрое. А вот обеспечить пропускную способность системы в количестве бизнес-операций на хост или на сетевой интерфейс или на 1 апп-сервер - вот он уровень синьорити. И не меряется он в количестве потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 15:31 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Так 200 потоков это томкат создает. Грубо говоря двести человек послали гет запрос - вот тебе и 200 потоков. Разумеется, так однозначно судить без вводных - это пальцем в небо. тут я с Вами конечно же согласен, уважаемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 15:37 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTТак 200 потоков это томкат создает. Грубо говоря двести человек послали гет запрос - вот тебе и 200 потоков. Разумеется, так однозначно судить без вводных - это пальцем в небо. тут я с Вами конечно же согласен, уважаемый. ну не 200, там потоков 20 в тредпуле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 16:53 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
maytonandreykaTА кстати, недавно с одними товарищами разговаривал и сказал что вот есть приложение там единомоментно в среднем в районе 20-ти потоков крутится. они так типа фии. так мало и вообще несерьезно. А по факту 200 потоков это 10 000 сессий. 20 потоков это 1000 сессий. приложение на тысячу сессий это мало? Это - учёт попугаев, мартышек и слонёнков. Что толку в 200 потоках если они в sleeping к примеру или ждут i/o ? Наплодить много потоков - дурное-дело-не-хитрое. А вот обеспечить пропускную способность системы в количестве бизнес-операций на хост или на сетевой интерфейс или на 1 апп-сервер - вот он уровень синьорити. И не меряется он в количестве потоков. Подтверждаю. Мне сейчас вычислительную задачу надо распараллелить. Так у меня один запрос раскладывается в 20-60 потоков на "вычислителе" + столько же потоков на модуле агригации и кэша ==> примерно 100 потоков в ThreadPool'е извлекающем данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 17:16 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
А сколь-вом пользователей это вообще никак не связано, т.к. ничто не мешает пользователей на разным VM отправлять (балансировщик нагрузки). В разумных приделах конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 17:20 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
забыл никandreykaTТак 200 потоков это томкат создает ...ну не 200, там потоков 20 в тредпуле Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2016, 17:51 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах ))) Пишут что лучше использовать ReentrantLock, стильно, модно, молодёжно, и работает быстрее чем synchronized. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 13:20 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoLeonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах ))) Пишут что лучше использовать ReentrantLock, стильно, модно, молодёжно, и работает быстрее чем synchronized. Уже давно сравнялось вроде как. Да и в принципе это такой subject to change. Надо использовать то что проще и лучше подходит к задаче. Если нет надобности именно в ReenTrant незачем и связываться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 13:41 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
забыл никXDiaBLoпропущено... Пишут что лучше использовать ReentrantLock, стильно, модно, молодёжно, и работает быстрее чем synchronized. Уже давно сравнялось вроде как. Да и в принципе это такой subject to change. Надо использовать то что проще и лучше подходит к задаче. Если нет надобности именно в ReenTrant незачем и связываться То есть такие картинки уже можно игнорировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 13:54 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Потестировал только что корявенько, похоже и правда разницы в быстродействии не заметно. Наверное я старья какого-то начитался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 14:34 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoТо есть такие картинки уже можно игнорировать? Их надо понимать, а точнее баграунд (в вашем случае спяртан за балым листом :) ). Synchronized изначально заточен на низкую конкуренцию, Reentrant на высокую. В соответствии с тем, что будет происходить и стоит выбирать инструмент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 14:38 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
В каких то случаях и самодельный спин на Атомиках имеет смысл. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 14:39 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoПотестировал только что корявенько, похоже и правда разницы в быстродействии не заметно. Наверное я старья какого-то начитался Наверное) Оно уже на 1.6 по-моему почти выровнялось. В любом случае, никто никаких гарантий не дает, и все может меняться от версии к версии. Так что прежде чем что-то делать, всегда нужно мерять, а такие статьи хоть и полезны для общего бэкграунды, но очень быстро устаревают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 14:43 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
andreykaTBlazkowiczпропущено... Ваш интервьюер не ошибся. Ведь в Java нет никаких Thread Queue, про которые вы так настойчиво пишете. тред блокинг куеуе. пардон. уточняю. Такой коллекции в JCF тоже нет. Самое близкое по названию - Blocking Queue https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 18:33 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
вопрос в чем плюс реентрант лока тогда? только не надо рассказывать про размазывание локов по коду. это бэд прэкстис за который надо нещадно карать. в любом случае ты эти локи опять-таки упаковываешь в трайкач и на выходе получается... получается.. такая же фигня как и блок синхронайзд ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2016, 13:43 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Я забил на всю эту конкуренси, мемори модел и т.п. мусор, только мозги марать. раньше были синхронайз, сейчас как из рога изобилия поперли выдумки космических архитекторов. Оно мало того что никогда не нужно, еще и вредно, изучение ущербных абстракций и подходов. Кто реально хочет крутых алгоритмов поизучать - есть всякие Хаскели, Си, Ерланги и т.п.чем разбираться в сломанных абстракциях многопоточности жавы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2016, 18:50 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
...а если еще и с фреймворками работаешь то вообще лажа выходит ))) там как правило, свой инструментарий для потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2016, 19:46 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Ну я подумал что зачем-то же в вакансиях пишут про многопоточность, и говорят что на собеседованиях могут и спрашивать про такое. К тому же сервлеты вроде как требуют понимания многопоточности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 09:20 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrвопрос в чем плюс реентрант лока тогда? Нет необходимости увязывать блокировку с блоком кода. Например, можно сделать захват блокировки по вызову одного метода и высвобождение по вызову другого. Что, конечно, потребует более аккуратного обращения в связи с возможной утечкой блокировки. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 09:47 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Во всяких спрингах и прочих хибернейтах и правда, примитивы синхронизации практически не нужны. НО - на дворе 21 век и асинхронные приложения. Многопоточность снова более чем актуальна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 11:42 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
scfВо всяких спрингах и прочих хибернейтах и правда, примитивы синхронизации практически не нужны. НО - на дворе 21 век и асинхронные приложения. Многопоточность снова более чем актуальна. Во всяком случае в вакансиях порой проскакивает многопоточность. И кажется мне, что это всё чаще происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 12:52 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
> на дворе 21 век и асинхронные приложения Лапша из коллбеков и евентов? Типа как в ноде.жс? Это деградация а не 21 век. 21 век это скорей GPU, мильены легких процессов, и т.п. Асинхронность в жаве - это костыль призванный компенсировать неспособность жавы и JVM эффективно работать с легкими процессами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 13:00 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
private, https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html http://docs.scala-lang.org/overviews/core/futures.html https://developers.google.com/web/fundamentals/getting-started/primers/promises ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 13:13 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Я не понял что вы хотели сказать ссылками. В одном случае я использую тупой обычный код и мильен легких процессов (Erlang), а платформа за меня сама разбирается как все это сделать эффективным. Во втором случае, из-за того что платформа не может решить свою задачу, она перекладывается на плечи программиста, и ему приходится использовать всю эту событийную лапшу, ссылки на которую вы привели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 13:42 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
private, Ссылками ничего не скажешь, сказать только можно текстом по этим ссылкам. Они описывают современный подход к разработке асинхронных программ - в котором нет коллбэков и "событийной лапши". Далее выбор за вами - или читать, или игнорировать. Ключевые слова: js promise, async await, scala future, actor model. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 13:56 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
scfСсылками ничего не скажешь, сказать только можно текстом по этим ссылкам. Они описывают современный подход к разработке асинхронных программ - в котором нет коллбэков и "событийной лапши". Далее выбор за вами - или читать, или игнорировать. Ключевые слова: js promise, async await, scala future, actor model. Раскройте, пожалуйста, мысль. Куда из Future пропал колбэк? Ключевое слово: continuation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 14:27 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, вышенаписанное не имеет отношения к java.util.concurrent.Future ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 15:11 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
событийная модель у меня всё чаще вызывает ощущение что тупо вернули когда то похеренный оператор гоу-ту в бейсике образца 1978-го года. и назвали его ивентом. а суть та же )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 22:41 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrсобытийная модель у меня всё чаще вызывает ощущение что тупо вернули когда то похеренный оператор гоу-ту в бейсике образца 1978-го года. и назвали его ивентом. а суть та же )) Да многое можно назвать синтаксическим сахаром, однако же так удобнее, чем совсем без сахара, в машинных кодах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 06:58 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
privateАсинхронность в жаве - это костыль призванный компенсировать неспособность жавы и JVM эффективно работать с легкими процессами. А что такое этот ваш "легкий процесс"? Попахивает, что это просто маркетинговый bullshit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 07:58 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimir, наверное, имеется в виду линуксовый fork(). Но это лет 20 как не модно уже - все современные демоны используют потоки и селекторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 10:32 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
В контексте исходного вопроса топика мне очень нравится начало доклада Руслана Черемина на одном из JPoint [spoiler] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 11:52 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirТак как нет спроса на такое количество специалистов, знающих это область на высоком уровне, для подавляющего большинства задач достаточно уметь правильно проставлять synchronized и volatile и на этом потребности заканчиваются. А, ну на таком то уровне надеюсь я уже изучил. Большинство работодателей получается не станет спрашивать про модель памяти Java, happens-before, и всякие там семафоры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 12:06 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:05 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
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). Про волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл, плюс отменяет кеширование переменной, чтобы все потоки актуальное значение читали. Ну и соответственно устанавливает хэппенс-бефо между записью и дальнейшими чтениями. Кроме того, когда поток читает такую переменную, он видит не только последнее значение переменной, но и также побочные эффекты кода который привёл к изменению. Вроде всё, или ещё что-то нужно про это знать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:21 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:28 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoПро волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл Верно, хотя я бы не конкретизировал про long/double, просто добавляет атомарность XDiaBLoплюс отменяет кеширование переменной, чтобы все потоки актуальное значение читали. Про кэши это от лукавого, вообще не надо об этом думать XDiaBLoНу и соответственно устанавливает хэппенс-бефо между записью и дальнейшими чтениями. Верно XDiaBLoКроме того, когда поток читает такую переменную, он видит не только последнее значение переменной, но и также побочные эффекты кода который привёл к изменению. Совершенно не факт, что он видит последнее значение переменной, но если он увидел какое то значение, то гарантируется, что он увидит все другие изменения выполненные потоком выполнявшим запись этого значения, которые были выполнены до момента записи в эту переменную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:41 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirСовершенно не факт, что он видит последнее значение переменной Так у Оракла в туториале написано. Только сегодня этот момент читал. Если врут, ну это печально. just_vladimirно если он увидел какое то значение, то гарантируется, что он увидит все другие изменения выполненные потоком выполнявшим запись этого значения, которые были выполнены до момента записи в эту переменную. Вот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:45 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirне, здесь как раз все просто, описывается формулой atomic = volatile + CAS Просто хотелось бы пример корректного кода __чисто__ на volatile. Например аналог банального AtomicInteger.inc ))) А пока мое IMHO volatile практически бесполезное ключевое слово. О котором достаточно просто знать, что оно есть. (да и то не обязательно). Т.к. на практике или synchronized или Atomic или что-то более сложное для конкретных задач. имхо, это Вы уже куда-то на уровень реализации полезли А без этого понять работу кода one producer - one consumer queue vs ConcurrentLinkedQueue на мой взгляд совсем не реально ))) По этому все это "уровень реализации" и наверное достаточно просто иметь общее представление и уметь пользоваться библиотеками. Ну и например ConcurrentLinkedQueue от гонок в бизнес логике не защищает. Т.ч. я бы сказал, что любое использование чего либо кроме synchronized в 99% "полезть на уровень реализации" с возможностью словить плохо тестируемые гонки в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:48 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoВот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции? На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно. На других архитектурах, это берет на себя JVM. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:52 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLojust_vladimirСовершенно не факт, что он видит последнее значение переменной Так у Оракла в туториале написано. Только сегодня этот момент читал. Если врут, ну это печально. Можно ссылочку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:55 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevXDiaBLoВот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции? На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно. AFAIK Вот уже второй раз ошибаешься :) Если есть два разных кэша (например два проца), то записав данные в память можно, конечно, всегда требовать, чтобы эта же строка, если она есть к кэша другуого процессора, обновилась, но это ОЧЕНЬ дорого стоит. Для этого и есть волотайл как частный случай барьера. Т.е. эфективная программа старается лишний раз кэш не сбрасывать. А то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:56 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:57 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Alexey TominLeonid Kudryavtsevпропущено... На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно. AFAIK Вот уже второй раз ошибаешься :) Если есть два разных кэша (например два проца), то записав данные в память можно, конечно, всегда требовать, чтобы эта же строка, если она есть к кэша другуого процессора, обновилась, но это ОЧЕНЬ дорого стоит. Для этого и есть волотайл как частный случай барьера. Т.е. эфективная программа старается лишний раз кэш не сбрасывать. А то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти. Так я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:00 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoТак я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение? Да. Хотя это я плохо понимаю ))). Запись в volatile переменную приводит к срабатыванию барьера. Более "странно" на мой взгляд, что в конструкторе final поля тоже являются барьером. Т.ч. если у тебя immutable класс, где все поля final, то его можно безопасно передавать между потоками. А вот, если он не immutable (mutable) то можно словить проблемы. Вроде сейчас Java-гуру обсуждают, не стоит ли сам new сделать барьером (на мой взгляд стоит, а то хрень разберешь современное поведение) но вроде в JVM 1.8 этого еще нет. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:13 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Alexey TominВот уже второй раз ошибаешься :) Можно ссылку? https://en.wikipedia.org/wiki/MESIF_protocol Alexey TominА то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти. Одно другому не мешает. false-sharing как раз и есть проблема из-за cache conerence. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:17 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:28 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimir, автор latest change to the volatile ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:29 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Про то, что не стоит пытаться опуститься на уровень реализации, а нужно постичь дзен JMM можно читать у Шипилева https://shipilev.net/blog/2016/close-encounters-of-jmm-kind/ Впрочем я сколько раз не пытался осилить, так до конца и не осилил)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:33 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLo, сойдемся на том, что мы немного по разному понимаем английский язык :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:34 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirПро то, что не стоит пытаться опуститься на уровень реализации, а нужно постичь дзен JMM можно читать у Шипилева https://shipilev.net/blog/2016/close-encounters-of-jmm-kind/ Впрочем я сколько раз не пытался осилить, так до конца и не осилил)) Спасибо за ссылку. just_vladimirXDiaBLo, сойдемся на том, что мы немного по разному понимаем английский язык :-) А что там понимать то? автор latest change to the volatile Самое последнее изменение в перменчивой переменной :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:38 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirЗачем нужен volatile - здесь просто, допустим у вас есть singleton глобальная static переменная, но которая не volatile, дак вот в этой ситуации у вас нет никакой гарантии, что разные потоки работающие с этой переменной будут видеть действия друг друга, у каждого потока может существовать свой лунапарк с блекджеком и мир, со своей переменной и он будет видеть только свои изменения. Ну Singleton тоже на volatile не реализовать ))) А при добавлении synchronized volatile уже и не нужен. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:41 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Мне кажется волатайл подходит тогда, когда нам не важно идёт ли запись одновременно с чтением, или нет. Ну пропустим мы значение, которое ещё по кешам не растеклось, а только ещё растекается. Однако не потратимся на дорогую синхронизацию, и получим нормальное целостное значение переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:45 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
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 переменную обязательное увидит самое последнее изменение этой переменной, а так же ... ". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:47 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
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 переменную обязательное увидит самое последнее изменение этой переменной, а так же ... ". Ну правильно, так как [видимое] это чисто ваши фантазии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:50 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
авторthe latest Значит "самое последнее", а не "последнее видимое". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:52 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevjust_vladimirЗачем нужен volatile - здесь просто, допустим у вас есть singleton глобальная static переменная, но которая не volatile, дак вот в этой ситуации у вас нет никакой гарантии, что разные потоки работающие с этой переменной будут видеть действия друг друга, у каждого потока может существовать свой лунапарк с блекджеком и мир, со своей переменной и он будет видеть только свои изменения. Ну Singleton тоже на volatile не реализовать ))) А при добавлении synchronized volatile уже и не нужен. AFAIK При добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:14 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevXDiaBLoТак я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение? Да. Хотя это я плохо понимаю ))). Запись в volatile переменную приводит к срабатыванию барьера. Как раз надо уйти от термина "срабатывание" и т.п. Надо просто понять, что JMM это список обязательств . Нам не надо знать, как это будет реализовано. Просто если мы прочитали волатайл, то мы видим все изменения, сделанные до записи этого волатайл в другом потоке. Как это сделано на конкретной платформе знать не надо. Надо прост ознать, что это не бесплатно. Leonid KudryavtsevБолее "странно" на мой взгляд, что в конструкторе final поля тоже являются барьером. Не барьером. Надо понимать, что после выхода из конструктора все, кто получил (после выхода!) ссылку на этот объект- прочитают нужные значения final. Опять же - не надо понять, как это сделано. Надо понимать, что, во-первых, "утечка" this приведёт к разрушению этого счастья, а во-вторых это стоит мало (в отличии от волатайл). PS: а кто-нибудь на jocker едет? Есть желающие развиртуализироваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:21 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLo, да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:25 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirXDiaBLo, да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее". Мне кажется, что понимание этого (нет самого последнего) - самое сложно в JMM. Причём когда поймёшь- просто же всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:29 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Alexey TominPS: а кто-нибудь на jocker едет? Есть желающие развиртуализироваться? Летом все откладывал покупку билета, а сейчас жаба душит покупать за текущую цену...( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:38 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirПри добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает. Можно ссылку на статьи. И про кошерность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:53 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
да что тут обсуждать? синхронизированная переменная может заменить volatile, обратное неверно. Вот только volatile дешевле, т.к. не требует захвата блокировки. Самое популярное применение - private volatile ImmutableState state; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:10 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevjust_vladimirПри добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает. Можно ссылку на статьи. И про кошерность. Начать отсюда https://habrahabr.ru/post/248041/, а дальше по ссылкам из начала статьи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:22 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirLeonid Kudryavtsevпропущено... Можно ссылку на статьи. И про кошерность. Начать отсюда https://habrahabr.ru/post/248041/, а дальше по ссылкам из начала статьи Хотя наверное признаю, что не совсем прав, в том смысле, что в принципе с synchronized мы можем получить корректную реализацию и в этом Вы несомненно правы, но она будет не эффективной, а вот если мы захотим ее реализовать эффективно (=кошерно), то помимо synchronized нам потребуется volatile. Собственно согласен вот с этим постом: scfда что тут обсуждать? синхронизированная переменная может заменить volatile, обратное неверно. Вот только volatile дешевле, т.к. не требует захвата блокировки. Самое популярное применение - private volatile ImmutableState state; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:26 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoПро волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл, плюс отменяет кеширование переменнойvolatile не отменяет кэширование, volatile отменяет некоторые оптимизации, которые иначе могли бы быть сделаны. Фактически, volatile это объявление: "значение переменной неподконтрольно текущему потоку". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 18:07 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimir.... а вот если мы захотим ее реализовать эффективно (=кошерно), то помимо synchronized нам потребуется volatile. Ну а дальше до кучу статей на хабре, где народ пишет, что DCL не факт, что эффективнее просто synchronized ))) А в некоторых случаях, у людей вроде даже получалось дороже. Т.ч. ссылка на статью как раз очень хороша. Кто-то сказал, что DCL в Singleton правильно - все не думая ломанулись так делать (паттерн! мать его ))) ). В результате, куча ошибок и непонятно какой выигрыш/проигрыш по performance. Мое IMHO: Leonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах ))) Если приложение может обработать от 500 до 2000 клиентских запросов в минуту, вряд ли, разница в скорости между synchronized коллекциями, ConcurrentLinkedQueue и/или single producer - single consumer queue будет заметна пользователям. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 18:54 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
scf....Самое популярное применение - private volatile ImmutableState state; А что это такое? можно ссылку, где об это почитать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 18:56 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, java.util.concurrent.ConcurrentLinkedQueue - обратите внимание на кол-во volatile полей в этом классе. В целом есть суровый труд the art of multiprocessor programming, который разбирает вопросы синхронизации с нуля и до вещей, которых даже на собеседованиях не спрашивают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 19:00 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Лучше я посмотрю, что нибудь более простое ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 19:02 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
А "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 19:03 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevА "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач ))) вот это, простите, жесть. обозвать wait-free concurrent queue неэффективным... ну поищите попроще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 19:07 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
scfLeonid KudryavtsevА "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач ))) вот это, простите, жесть. обозвать wait-free concurrent queue неэффективным... ну поищите попроще. Я не говорил, что неэффективный. Я сказал, что есть более простые и эффективные для ряда применений. Как раз эффективность и определяется тем, что в них намного меньше volatile и Atomic'ов https://github.com/JCTools ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 19:21 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Реализация Circular Queue / RingBuffer значительно проще/эффективнее LinkedQueue. В некоторых случаях, еще и функциональней. Например если нам нужен fixed размер queue и нужно отслеживать возможное превышение размера. Проверка по ConcurrentLinkedQueue.size, понятное дело, вообще ни в какие ворота не лезет. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 19:34 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirXDiaBLo, да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее". Да я давно понял что вы имеете в виду. Я думал мы спорим по поводу перевода этой фразы с английского. А Вы между строк читаете. Так вот в документации следует писать точнее, без всяких "между строк". Думаю это недостаток той документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 06:51 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile). Так тут все просто. volatile более примитивен и дешевле, чем Atomic. Volatile простой способ устанавить hb барьер. Атомик добавляет и прочие плюшки (проверку перед записью, инкремент и пр.). Дальше больше и дороже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 18:08 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНу Singleton тоже на volatile не реализовать ))) А не Singleton можно. Публикация объекта через volatile - способ гарантировать, что его конструктор отработает до того, как им попробуют воспользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 18:12 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2123646]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
108ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 415ms |

| 0 / 0 |
