سؤال

لقد كنت أقرأ الكثير عن ذاكرة المعاملات مؤخرا. هناك القليل من الضجيج حول TM، وبالتالي فإن الكثير من الناس متحمسون به، وتوفر حلولا للمشاكل المؤلمة في قفل، لكنك ترى بانتظام أيضا شكاوى:

  • لا يمكنك أن تفعل I / O
  • عليك أن تكتب الأقسام الذرية الخاصة بك حتى يتمكنوا من تشغيل عدة مرات (كن حذرا مع المتغيرات المحلية الخاصة بك!)
  • تقدم ذاكرة معاملات البرمجيات أداء ضعيف
  • أدخل Pet Peeve هنا

أفهم هذه المخاوف: في أغلب الأحيان، يمكنك العثور على مقالات حول STMS التي تعمل فقط على بعض الأجهزة المعينة التي تدعم بعض العملية الذرية ذات الأذى حقا (مثل LL / SC.)، أو يجب دعمها من قبل بعض التحويل البرمجي الوهمي، أو يتطلب ذلك الكل الوصول إلى الذاكرة تكون المعاملات، فإنه يقدم قيود نوع النمط، وما إلى ذلك وقبل كل شيء: هذه مشاكل حقيقية.

هذا قد قادني إلى أن أسأل نفسي: ما يتحدث ضد الاستخدام المحلي لذاكرة المعاملات كبديل للأقفال؟ هل سيحضر هذا بالفعل قيمة كافية، أو يجب استخدام ذاكرة المعاملات في جميع أنحاء المكان إذا تم استخدامها على الإطلاق؟

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

المحلول

نعم، يمكن أن تكون بعض المشاكل التي تذكرها حقيقية الآن، لكن الأمور تتطور. كأي تكنولوجيا جديدة، أولا هناك ضجيج، ثم توضح التكنولوجيا الجديدة أن هناك بعض المشاكل التي لم يتم حلها، ثم يتم حل بعض هذه المشكلات والبعض الآخر لا. هذا يؤدي إلى إمكانية أخرى لحل مشاكلك، والتي هذه التكنولوجيا هي أكثر تكيفا.

سأقول أنه يمكنك استخدام STM لجزء من التطبيق الخاص بك يمكن أن يغادر مع القيود التي تيارات الدولة للفن. جزء من التطبيق الذي لا تمانع في فقدان الكفاءة على سبيل المثال.

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

I / O هو أيضا ممكن، لكن معاملتك تصبح غير قابلة للإلغاء، وهذا هو، لا يمكن إحباطها. هذا يعني أن المعاملة الوحيدة فقط يمكن أن تستخدم I / O في نفس الوقت. يمكنك أيضا استخدام I / O بمجرد نجاح معاملة المستوى الأعلى، على عالم غير معاملات، كما الآن.

تجبر معظم أنظمة قاعدة STM الأساسية على المستخدم على إحداث الفرق بين البيانات المعاملات وغير المعاملات. نعم، تحتاج إلى فهم ما يعنيه هذا بالضبط. من ناحية أخرى، يمكن للمجمعات الترجمة أن يستنتج ما يجب أن يكون الوصول إلى المعاملات أم لا، كانت المشكلة هي أنه يمكن أن تكون محافظة للغاية، مما يقلل من الكفاءة التي يمكننا الحصول عليها عندما ندخل صراحة النوع المختلفة من المتغيرات. هذا هو نفس وجود متغيرات ثابتة ومحلية وديناميكية. تحتاج إلى معرفة القيود التي يتعين على كل منها إجراء برنامج صحيح.

نصائح أخرى

لقد كنت أقرأ الكثير عن ذاكرة المعاملات مؤخرا.

قد تكون مهتما أيضا بهذا بودكاست على ذاكرة معاملات البرمجيات, ، والتي تقدم أيضا STM باستخدام القياس بناء على مجموعة القمامة:

ال ورق يدور حول تشبيه بين جمع القمامة وذاكرة المعاملات. بالإضافة إلى رؤية جمال القياس، تعمل المناقشة أيضا كإجراء جيد لذاكرة المعاملات (التي تم ذكرها في حلقة GoeTz / Holmes) و - إلى حد ما - لجمع القمامة.

إذا كنت تستخدم ذاكرة معاملات كاستبدال للأقفال، فيمكن إخراج جميع التعليمات البرمجية التي ينفذها مع هذا القفل الذي عقده عند الانتهاء. وبالتالي، يجب أن يكون التعليمات البرمجية التي كانت تستخدم الأقفال سابقا، ولديها جميع العيوب نفسها (وفوائد).

لذلك، يمكنك تقييد تأثير TM فقط بأجزاء من التعليمات البرمجية التي تعقد الأقفال، أليس كذلك؟ يجب أن يدعم كل قطعة من التعليمات البرمجية التي يمكن استدعاؤها أثناء قفل ثابت TM، في هذا السيناريو. ما مقدار البرنامج الخاص بك لا يحمل الأقفال ولا يطلق عليه أبدا بواسطة الرمز الذي يحمل الأقفال؟

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