|
|
|
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 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39320549&tid=2123646]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 382ms |

| 0 / 0 |
