|
|
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
*leap ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 18:57 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
questionervimbaпропущено... Забудте о кешах и о времени, JMM специально Вам дана, чтобы Вы об этих двух понятиях программируя, многопоточный код на java никогда не думали. Где вам почудилось время то я не могу понять в первом посте? Я не правильно интерпритировал сразу , Вы так изъясняетесь что без дополнительных комментариев непонятно что значит сразу, это можно понять и как момент времени, что я собственно и сделал. questionerвремя задаёт ордеринг? И здесь то же самое, у Вас потрясающая способность писать двусмысленные фразы, я лично не понимаю даже из контекста кто-кого задаёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 19:16 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
vimbaquestionerпропущено... Где вам почудилось время то я не могу понять в первом посте? Я не правильно интерпритировал сразу , Вы так изъясняетесь что без дополнительных комментариев непонятно что значит сразу, это можно понять и как момент времени, что я собственно и сделал. questionerвремя задаёт ордеринг? И здесь то же самое, у Вас потрясающая способность писать двусмысленные фразы, я лично не понимаю даже из контекста кто-кого задаёт. время - подлежащее задаёт - сказуемое ордеринг - дополнение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 19:22 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
questioner, Ну и какой порядок задает время? Happens-befor order или Synchronized-with order, или оба сразу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 19:34 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
vimbaquestioner, Ну и какой порядок задает время? Happens-befor order или Synchronized-with order, или оба сразу? время задаёт обычный человеческий порядок. happens-before задаёт правила порядка выполнения кода и видимости. Порядок это значит до или после, то бишь одно раньше/после другого. Но это пограничное событие, которое определяет ребро, оно всё равно в какой-то момент времени происходит. То есть время это аттрибут нашего события. И в обычном мире событие, которое происходит после имеет время большее, нежели у этого события, задающее ребро. а вот кстати про Synchronized-with order не слышал. Объясните недвусмысленно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 19:44 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
questionerну много разных happens-before бывает. Что конкретно хотите этим показать? я разве где-то писал, что этого не может быть? я всего лишь написал, что есть гарантия, что если мы вышли из блока syncronized, то потом при входе в секцию по тому же монитору мы гарантированно увидим изменения в блоке из которого вышли. Комментарий из разряда "поумничать ради поумничать" Скорее вопрос. Вы так еще по прошлому не поняли, что означает happens before. Это всего лишь гарантированная точка синхронизации, говорящая, что если видно, что было на момент точки видно и то, что было до того. На самом деле этим отношением показывают взаимодействие в памяти. На самом деле в момент доступа к volatile, началу блока синхронизации, его окончанию, захвату блокировки и т.п. устанавливается барьер для out of order execution и происходит сброс измененного кеша проца в память с инвалидацией соответствующих страниц на других процах. Тем самым появляется гарантия видимости. До этого момента нет гарантии, что изменения будут видны, как впрочем и нет гарантий что они не будут видны, полностью или частично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 23:11 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
vimbaЗабудте о кешах и о времени, JMM специально Вам дана, чтобы Вы об этих двух понятиях программируя, многопоточный код на java никогда не думали. Кому как удобнее понять. Кому-то "до/после", кому-то "барьер в памяти", кому-то "версия страницы". Главное, чтоб стало понятно, что не поток пройдя сквозь монитор видит актуальное состояние, а наоборот оповещает остальных о том, что он сделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 23:25 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
questionerвремя задаёт ордеринг? да,задаёт(ну кроме lip second). По-моему, очевидно. Очевидное очень часто ложно. В данном случае определенно. Порядок задает исходный код программы. А до или после решает jvm по ходу пьесы. Другими словами Код: java 1. 2. 3. 4. JMM разрешает сделать jvm и сначала инкремент, затем увеличение на два.И сначала увеличение на два, а затем инкремент. И даже сразу присвоение тройки.Но требует, чтобы к моменту работы с потоком эти операции были сделаны полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 23:32 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевСкорее вопрос. Вы так еще по прошлому не поняли, что означает happens before. почему не понял? Сергей АрсеньевЭто всего лишь гарантированная точка синхронизации, говорящая, что если видно, что было на момент точки видно и то, что было до того. Хитро закрученная фраза, несколько раз перечитал с попыткой расставить паузы по разному, не помогло. Помогите мне найти, плиз, гарантии на вход в критическую секцию. Пример приветствуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 00:09 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевquestionerвремя задаёт ордеринг? да,задаёт(ну кроме lip second). По-моему, очевидно. Очевидное очень часто ложно. В данном случае определенно. Порядок задает исходный код программы. А до или после решает jvm по ходу пьесы. Другими словами Код: java 1. 2. 3. 4. JMM разрешает сделать jvm и сначала инкремент, затем увеличение на два.И сначала увеличение на два, а затем инкремент. И даже сразу присвоение тройки.Но требует, чтобы к моменту работы с потоком эти операции были сделаны полностью. Вы всё в кучу смешали. я не говорю, что всё, что очевидно это правда. В вашем примере, да, реордеринг может случиться и другой поток может увидеть нечто вгоняющее в ступор, но это особенность JMM. Я лишь говорю, что время это АТТРИБУТ события(1). любое, любое другое событие после события(1) будет иметь время, большее, чем у события(2), а меньшее, меньше, чем у события(1). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 00:13 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
Здорово расписано про все: http://en.cppreference.com/w/cpp/atomic/memory_order на более низком уровне, чем happens-before. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 01:11 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
Blazkowiczsynchronized через ch пишеться, если что."пишется" без ь пишется, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 06:51 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
questionerа что значит дойдёт? что вы под этим подразумеваете? Что угодно. JMM это список гарантий. Не более. Все попытки придумать "как это делано"- это пустая трата времени (более того, это запутывает). Волатильность гарантирует только две вещи- атомарность и то, что чтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит. Никаких гарантий, какую запись увидит чтение нет. Вообще никаких. Сброс кэшей и т.п.- это только чьи-то фантазии. Если в JDK 1.8.101 сделано так, то в 1.8.111 может всё быть уже по-другому. Если что-то выпоняется на intel core i7, то на ARM может быть всё другое. А арендовав машину в облаке можно получить что угодно. questionerкогда второй поток обратится? да в какой бы момент после записи волатильной переменной не обратился, в любой момент и увидит новой значение. Откуда, ну откуда Вы это взяли? Никто и нигде такого не обещал. questionerопять же у момента записи есть свойство - время, соответственно, транзитивно верно сказать, что после времени записи волатильной переменной любые потоки увидят это обновление. Такое обязательство (наличие момента времени для каждой операции) снизило бы производительность многоядерной системы на несколько порядков. Поэтому "у момента записи есть свойство - время" - неправда. Чем быстрее Вы это поймёте- тем быстрее поймёте JMM и вообще разработку в многопроцессорной среде. Вся JMM построена на понятии частичного порядка. По сути "если мы видим вот эту запись, то мы видим и вот эти операции точно, а вот эти- может быть". Всё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 09:21 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
> чтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит. Кто на ком сидел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 09:36 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
> оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора" Это большая беда сейчас. Молодёжь не хочет читать формальные спецификации, а полагается на своё "понимание работы процессора". Говорят, что полезно начинать учиться прогать с ассемблера. Сколько я наблюдал таких начавших — все они были подтверждением того, что НЕ полезно. Пишут код исходя из своего "понимания" работы. И когда видят, что компилятор компилирует во что-то, что не соответствует этому "пониманию", начинают бегать везде и вопить о багах в компиляторах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 09:50 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
Alexey TominВсё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора"). То что оно не пригодится на практике, вообще никак не значит что про это нужно забывать. Полезно понимать природу вещей, а не абстрактные аксиомы. Для понимания нужно знать как всё работает. JMM нужна совершенно для другого - она даёт доказательных механизм корректности работы кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 09:50 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
Alexey Tominquestionerа что значит дойдёт? что вы под этим подразумеваете? Что угодно. JMM это список гарантий. Не более. Все попытки придумать "как это делано"- это пустая трата времени (более того, это запутывает). Волатильность гарантирует только две вещи- атомарность и то, что чтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит. Никаких гарантий, какую запись увидит чтение нет. Вообще никаких. Сброс кэшей и т.п.- это только чьи-то фантазии. Если в JDK 1.8.101 сделано так, то в 1.8.111 может всё быть уже по-другому. Если что-то выпоняется на intel core i7, то на ARM может быть всё другое. А арендовав машину в облаке можно получить что угодно. Нет уж давайте конкретно. что значит "дойдёт"? Про атомарность это Вы про long и double ? Alexey Tominчтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит. Для видимости внутри одного потока у нас и так есть гарантии(happens before) по JMM. Никакой volatile тут не при делах. Alexey Tominquestionerкогда второй поток обратится? да в какой бы момент после записи волатильной переменной не обратился, в любой момент и увидит новой значение. Откуда, ну откуда Вы это взяли? Никто и нигде такого не обещал. А как же ж нет то? давайте посмотрим на любой код, который работает с volatile, а без него не гарантированно. Alexey Tominquestionerопять же у момента записи есть свойство - время, соответственно, транзитивно верно сказать, что после времени записи волатильной переменной любые потоки увидят это обновление. Такое обязательство (наличие момента времени для каждой операции) снизило бы производительность многоядерной системы на несколько порядков. Поэтому "у момента записи есть свойство - время" - неправда. Чем быстрее Вы это поймёте- тем быстрее поймёте JMM и вообще разработку в многопроцессорной среде. Вся JMM построена на понятии частичного порядка. По сути "если мы видим вот эту запись, то мы видим и вот эти операции точно, а вот эти- может быть". Всё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора"). Это похоже на side effect volatile. А как по вашему мы должны определять увидели мы изменение или нет? в коде может как-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 10:26 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
BlazkowiczCommon LispBlazkowicz, подскажи)) На юг.Зачем?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 10:27 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominВсё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора"). То что оно не пригодится на практике, вообще никак не значит что про это нужно забывать. Полезно понимать природу вещей, а не абстрактные аксиомы. Для понимания нужно знать как всё работает. JMM нужна совершенно для другого - она даёт доказательных механизм корректности работы кода. Расскажите пожалуйста про то, что случается при входе в критическую секцию с кешами. Я такого не встречал пока что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 10:28 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominВсё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора"). То что оно не пригодится на практике, вообще никак не значит что про это нужно забывать. Полезно понимать природу вещей, а не абстрактные аксиомы. Для понимания нужно знать как всё работает. JMM нужна совершенно для другого - она даёт доказательных механизм корректности работы кода. Знать это надо, не надо это пытаться применять в данном случае :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 10:57 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
questionerBlazkowiczпропущено... То что оно не пригодится на практике, вообще никак не значит что про это нужно забывать. Полезно понимать природу вещей, а не абстрактные аксиомы. Для понимания нужно знать как всё работает. JMM нужна совершенно для другого - она даёт доказательных механизм корректности работы кода. Расскажите пожалуйста про то, что случается при входе в критическую секцию с кешами. Я такого не встречал пока что. Зависит от процессора. Это главное, что надо знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 10:59 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
questionerНет уж давайте конкретно. что значит "дойдёт"? Значит, что второй поток увидит значение, заданное в другом потоке. Через сколько тактов процессора второй поток увидит изменения, сделанные первым- точно неизвестно. questionerПро атомарность это Вы про long и double ? Да, хотя для intel это не актуально, но может стрельнуть на каком-нибудь ARM. questionerAlexey Tominчтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит. Для видимости внутри одного потока у нас и так есть гарантии(happens before) по JMM. Никакой volatile тут не при делах. Да, я неудачно выразился. Если в потоке 1 поменяли значения волательной переменной и в потоке 2 мы это увидели, то мы увидим (во втором потоке) так же все изменения, сделанные в 1м потоке до (внутри одного потока допустимо говорить о порядке) изменения волатильной переменной. Но надо понимать, что можем увидеть и ЕЩЁ какие-то изменения ;) questionerAlexey TominОткуда, ну откуда Вы это взяли? Никто и нигде такого не обещал. А как же ж нет то? давайте посмотрим на любой код, который работает с volatile, а без него не гарантированно. Не путайте "обычно так" и "гарантировано". В этом и проблема, что код с ошибкой работает в 99.9% случаев. Т.е. у заказчика бага будет, а воспроизвести- фиг. questionerЭто похоже на side effect volatile. А как по вашему мы должны определять увидели мы изменение или нет? в коде может как-то? А волатильные переменные и служат флагами. Мы просто ждём, пока увидим изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 11:04 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
Alexey Tominquestionerпропущено... Расскажите пожалуйста про то, что случается при входе в критическую секцию с кешами. Я такого не встречал пока что. Зависит от процессора. Это главное, что надо знать. я спросил, что случится, получил ответ, что главное, это надо знать. Что знать то надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 11:39 |
|
||
|
syncronized vs volatile с точки зрения visibility
|
|||
|---|---|---|---|
|
#18+
Alexey TominquestionerНет уж давайте конкретно. что значит "дойдёт"? Значит, что второй поток увидит значение, заданное в другом потоке. Через сколько тактов процессора второй поток увидит изменения, сделанные первым- точно неизвестно. questionerПро атомарность это Вы про long и double ? Да, хотя для intel это не актуально, но может стрельнуть на каком-нибудь ARM. questionerпропущено... Для видимости внутри одного потока у нас и так есть гарантии(happens before) по JMM. Никакой volatile тут не при делах. Да, я неудачно выразился. Если в потоке 1 поменяли значения волательной переменной и в потоке 2 мы это увидели, то мы увидим (во втором потоке) так же все изменения, сделанные в 1м потоке до (внутри одного потока допустимо говорить о порядке) изменения волатильной переменной. Но надо понимать, что можем увидеть и ЕЩЁ какие-то изменения ;) questionerпропущено... А как же ж нет то? давайте посмотрим на любой код, который работает с volatile, а без него не гарантированно. Не путайте "обычно так" и "гарантировано". В этом и проблема, что код с ошибкой работает в 99.9% случаев. Т.е. у заказчика бага будет, а воспроизвести- фиг. questionerЭто похоже на side effect volatile. А как по вашему мы должны определять увидели мы изменение или нет? в коде может как-то? А волатильные переменные и служат флагами. Мы просто ждём, пока увидим изменения. так мы можем долго разбираться, давайте Вы приведете пример с volatile, где мы увидим, что изменение не гарантировано и обсудим действительно ли оно не гарантировано. И как этот флаг будет использоваться. Зачем мне, разработчику на java, задумываться о тактах процессора? сброс кешей хоть упрощает понимание происходящего, а такты то мне зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 11:43 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39394981&tid=2123178]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
95ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 454ms |

| 0 / 0 |
