|
|
|
Reordering
|
|||
|---|---|---|---|
|
#18+
rfqcdtyjvВ ней сказано: " мы не знаем, что вы там увидите ". Может быть старое значение, может быть новое значение, может быть это будет мусорный результат спекуляции, может это будет мусорный результат неатомарной записи long/double значения, да что угодно это может быть. В каком месте это сказано? Там не сказано иное. А гарантируется только то, что указано явно. Реализаторы JVM должны обеспечить выполнение некоторых правил. Остальное- как повезёт. "Переупорядочивание", ещё раз, в основном итог взаимодействия ПРОЦЕССОРОВ. JVM обязана бороться с ним в указанных рамках. В остальных- как 247й транзистор контроллера памяти захотел- так и переупорядочится запись С ТОЧКИ ЗРЕНИЯ соседнего процесса. Одномоментность при взгляде с разных мест разная :) PS: где вы вообще видели интерпретатор JVM? Давно уже компилятор в большинстве случаев работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 22:00 |
|
||
|
Reordering
|
|||
|---|---|---|---|
|
#18+
rfqcdtyjvВ ней сказано: " мы не знаем, что вы там увидите ". Может быть старое значение, может быть новое значение, может быть это будет мусорный результат спекуляции, может это будет мусорный результат неатомарной записи long/double значения, да что угодно это может быть. В каком месте это сказано?Более глубокое изучение JMM показало следующее: 1) JMM запрещает out-og-thin-air значения даже для некорректно синхронизированных программ. Формально это означает, что если я читаю X, то прочитанное мной значение обязательно должно было быть _честно_ записано туда ранее. Так как спекулятивные записи к _честным_ не относятся, то чтение спекулятивных значений в JMM запрещено. Формально это описано вот в этой главе JLS - http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.8 . А более человеческим языком вот здесь - http://cseweb.ucsd.edu/classes/fa05/cse231/Fish.pdf . 2) При всем при этом, как мы знаем, JMM допускает неатомарные записи long/double. То есть, если у меня был long, иниициализированный нулем, один тред записал туда 0xffffffff00000000, а другой 0x00000000ffffffff, то третий поток может увидеть не три, а четыре значения: 0, 0x00000000ffffffff, 0xffffffff00000000 и 0xffffffffffffffff . Лично я не вижу отличий между тем, что поток увидит какое-то левое значение, из-за того, что две одновременные записи long "наложились" друг на друга, и тем, что поток увидит спекулятивную запись, которая потом будет откачена. А JMM эти два случая разделяет. То есть, неатомарная запись long/double, это по логике вещей вроде бы out-of-thin-air, а вроде бы и нет. Собственно, поэтому я и настаивал на том, что чтение спекулятивной записи не запрещено, ибо я не вижу разницы между этими двумя случаями. Как это понять - хз. Думаю, здесь спасет разве что письмо в concurrency-interest в надежде услышать ответ от отцов-основателей JMM. Что я сегодня и сделаю, а потом напишу ответ на Хабре, ибо жесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 22:35 |
|
||
|
Reordering
|
|||
|---|---|---|---|
|
#18+
забыл никО чем спор, а то я запутался? Отличный вопрос. Я бы сказал так: с автором тренингов спорят о том, стоит ли вводить излишние сущности там, где они не нужны. Спор примерно такой: ТС2 * 2 = 4 - это верно только в однопоточной программе, а в многопоточный программе иначе? звезда тренинговКто вам такое сказал? В десятичной системе счисления - да, но вот в троичной совсем иначе! Так что, если вы хотите правильно считать в десятичной системе, учите правила! И потерпите, я скоро буду у вас в городе с циклом лекций по таблице умножения ТСУ меня вроде десятичная... звезда тренинговНу и что? Есть еще, например, двоичная... всеНо у нас же десятичная!! звезда тренинговЭто да, но вот есть еще комплексные числа... всеНо у нас же десятичная!!! звезда тренинговТак-то оно так, но вот в другой галактике... Примерно в таком ключе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 23:23 |
|
||
|
Reordering
|
|||
|---|---|---|---|
|
#18+
После тяжелых дум я таки разобрался в вопросе. Итого: 1) Принципиальное отличие между word tearing (т.е. когда мы засрали long/double конкурирующими неатомарными записями) принципиально отличается от гипотетической ошибочной спекулятивной записи тем, что результат word tearing может оставаться актуальным неограниченно долго, а спекулятивная ошибка eventually будет откачена. Таким образом, результат word tearing можно рассматривать, как результат нормального store commit, и его нельзя отнести к out-of-thin-air в том значение, которое использует JMM. 2) Тем не менее, наличие out-of-thin-air результатов не является препятствием для создания рабочих моделей памяти. Пример - модель памяти C++11. Изначально она допускала такое. В 2012 пошли разговоры о том, что бы пойти путем Java, и запретить это ( http://preshing.com/20120625/memory-ordering-at-compile-time/ ). Чем в итоге кончилось - не знаю. 3) Мотивация создателей JMM по запрету out-of-thin-air значений была по сути одна - безопасность. Так как Java ставит security во главу угла (а мы на нее постоянно благополучно кладем. отключая SecurityManager ), ситуация, когда мы можем увидеть какое-то непонятное значение недопустима, так как этим "смотрящим" может быть не-trusted код, а "непонятным значением" может оказаться какой-нибудь пароль. А мы хотим, что бы даже те программисты, которые незнакомы с JMM, могли писать по возможности максимально безопасный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 00:52 |
|
||
|
Reordering
|
|||
|---|---|---|---|
|
#18+
Результаты спекулятивного выполнения смогли продержаться невидимыми для программы на протяжении одного сообщения, но потом снова стали видны благодаря какой-то мистической силе JMM. Это уже победа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2014, 14:08 |
|
||
|
Reordering
|
|||
|---|---|---|---|
|
#18+
Alexey TominНедавно наткнулся на Ну, Шипилев же. Уже легендарный докладчик. Если понравилось, ищи все его даклады. И на хабре статьи у него клевые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 11:01 |
|
||
|
Reordering
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominНедавно наткнулся на Ну, Шипилев же. Уже легендарный докладчик. Если понравилось, ищи все его даклады. И на хабре статьи у него клевые. Да я знаю- слушал и вживую много раз. Но обычно всё были заковыристые темы, типа "как я провёл лето" "как я сломал JVM нафиг"- а тут именно ликбез "от и до". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 12:53 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38530243&tid=2127580]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 443ms |

| 0 / 0 |
