سؤال

"القراءات القذرة"، والتي تعني قراءة قيمة كائن ما على الرغم من أنه مقفل ضد الكتابة بواسطة مؤشر ترابط آخر، هي الموصوفة على موقع Terracotta الإلكتروني، سمعت أنه لا ينبغي استخدامها، حتى لو كنت لا تهتم باحتمالية حصولك على بيانات قديمة عندما تقوم بقراءة الكائن المقفل بشكل سيئ.

هل لدى أي شخص أي خبرة في استخدام القراءات القذرة في Terracotta، وهل هي آمنة للاستخدام إذا كنت لا تهتم بإمكانية قراءة قيمة قديمة؟

هل كانت مفيدة؟

المحلول

القراءة القذرة هي قراءة قذرة.Terracotta، الذي يتم توزيعه/تجميعه، يضيف فقط إمكانية قراءة القيم الأقدم للحالة المشتركة القابلة للتغيير والتي تصل إليها دون مزامنة مناسبة.

يجب أن تلاحظ أنه في ظل نموذج الذاكرة في Java 5، لا نضمن لك ذلك أبدًا اقرأ قيمة محدثة إذا كنت لا تستخدم المزامنة المناسبة.قد يقرر الطين الاستفادة من هذا الاحتمال.في الواقع، يمكن لأي JVM الاستفادة منه في أوقات فراغه.حتى لو كان من الممكن أن يعمل على جهازك، فقد يتعطل على الأجهزة الأخرى.قد ينقطع بسبب التحديثات البسيطة لـ JVM، وقد ينقطع بسبب نفس الإصدار من نفس JVM على وحدة معالجة مركزية مختلفة.

مع أخذ ذلك في الاعتبار، يمكنك القول أن القراءات القذرة ليست آمنة في أي JVM...إلا إذا كنت لا تمانع في احتمال عدم تمكنك مطلقًا من قراءة التحديثات التي تجريها المواضيع الأخرى - وهو موقف غير مرجح ولكنه قد يحدث.

أيضًا، عندما تتبع الرابط الخاص بك إلى Terracottas wiki، فإنه يشير إلى أنه تمت إزالة المقالة وأنه لا يُنصح باستخدام هذا النمط.

نصائح أخرى

أنا مطور تيراكوتا.جوهر الإجابة هو تمامًا كما أشار كريستيان فيست هانسن بالفعل - تمامًا كما لا يقدم JVM أي ضمانات بشأن رؤية تحديثات كائن مشترك يتم الوصول إليه بدون مزامنة مناسبة، لا يمكن لـ Terracotta أيضًا تقديم أي ضمانات بشأن القراءات القذرة لكائن مشترك. كائن متجمع.

لقد تمت إزالة الرابط عمدًا واستبداله بتحذير بعدم استخدام هذا النمط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top