Безопасны ли "грязные чтения" в Терракоте?
"Грязные чтения", означающие чтение значения объекта, даже если он заблокирован от записи другим потоком, описаны на веб-сайте Terracotta, но я слышал, что их не следует использовать, даже если вас не волнует возможность что вы можете получить старые данные, когда грязно читаете заблокированный объект.
Есть ли у кого-нибудь опыт использования грязного чтения в терракоте, и безопасно ли его использовать, если вас не волнует возможность чтения старого значения?
2 ответа
Грязное чтение - это грязное чтение. Распределенная / кластеризованная терракота только добавляет возможность считывать даже более старые значения общего изменяемого состояния, к которому вы обращаетесь, без надлежащей синхронизации.
Вы должны заметить, что в модели памяти в Java 5 вам не гарантировано, что вы когда-либо читаете обновленное значение, если вы не используете правильную синхронизацию. Терракота может решить воспользоваться этой возможностью. Фактически, любая JVM может в свое свободное время воспользоваться этим. Даже если он может работать на вашей машине, он может сломаться на других машинах. Может произойти сбой при незначительных обновлениях JVM и может произойти сбой для одной и той же версии той же JVM на другом процессоре.
Имея это в виду, вы можете сказать, что грязное чтение не безопасно в любой JVM... Если вы не возражаете против возможности того, что вы никогда не сможете прочитать обновления, которые делают другие потоки - маловероятная ситуация, но Это могло случиться.
Кроме того, когда вы действительно переходите по своей ссылке на Terracottas wiki, это говорит о том, что статья удалена и шаблон не рекомендуется.
Я разработчик терракоты. Суть ответа так же, как уже отмечал Кристиан Вест Хансен - точно так же, как JVM не дает никаких гарантий относительно видимости обновлений общего объекта, к которому осуществляется доступ без надлежащей синхронизации, Terracotta также не может дать никаких гарантий относительно грязного чтения кластерный объект.
Ссылка действительно была намеренно удалена и заменена предупреждением, чтобы не использовать этот шаблон.