الشقق ذات الخيوط المفردة مقابل الشقق ذات الخيوط المتعددة [نسخة مكررة]

StackOverflow https://stackoverflow.com/questions/485086

سؤال

التكرار المحتمل:
هل يمكن أن تشرح STA وMTA؟

كافة المواضيع ThreadPool في شقة متعددة مؤشرات الترابط.

--حسب MSDN

ماذا يعني ذالك؟أنا مهتم حقًا بالفرق بين نموذج الشقة متعدد الخيوط والمفرد.أو ماذا يعني نموذج الشقة؟لقد قرأت MSDN عليه، وهذا ليس له معنى حقًا بالنسبة لي.أعتقد أنه قد يكون لدي فكرة، ولكنني كنت أفكر أن شخصًا ما هنا يمكنه شرحها باللغة الإنجليزية البسيطة.

شكرا أنتوني د

تحديث 1

وجدت هذاهل يمكن أن تشرح STA وMTA؟

يمكن لأي شخص أن يكون أكثر وصفية؟

تحديث 2

أنا أيضًا أبحث عن إجابة حول كيفية تطبيق ذلك على تجمع سلاسل الرسائل، وما الذي يجب علي الانتباه إليه بسبب ذلك.

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

المحلول

STA (شقة ذات ترابط واحد) وMTA (شقة ذات ترابط متعدد) تتعلقان بـ كوم.يمكن تصميم مكونات COM ليتم الوصول إليها من خلال مؤشر ترابط واحد، وفي هذه الحالة يتم استضافتها في ملف ستا, ، أو يمكن جعلها آمنة لمؤشر الترابط الداخلي، واستضافتها في ملف MTA.يمكن أن تحتوي العملية على MTA واحد فقط، ولكن هناك العديد من STAs.إذا كنت ستستهلك مكونات COM فقط، فكل ما تحتاج إلى معرفته حقًا هو أنه يتعين عليك مطابقة الشقة مع المكون وإلا ستحدث أشياء سيئة.

نصائح أخرى

في الواقع، STAs وMTAs لها تأثير على كود .NET.راجع إدخال مدونة Chris Brumme للحصول على مزيد من التفاصيل، فربما تحتاج إلى:

https://devblogs.microsoft.com/cbrumme/apartments-and-pumping-in-the-clr/

من المهم حقًا أن نفهم كيف تقوم STAs بضخ الرسائل في .NET.لها عواقب.

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

إذا كان من الممكن الوصول إلى كائن COM الخاص بك بواسطة العديد من مؤشرات الترابط في وقت واحد، فاستخدم MTA - لن يكون هناك أي حراس في مكانهم.

وكما أشار آخرون، فإنه بشكل عام له تأثير ضئيل على تطبيقات .NET.

ومع ذلك، انتبه إلى أن مضيف اختبار Microsoft المستخدم لاختبارات الوحدة يتم تنفيذه فعليًا في STA، مما يعني أن هناك قيودًا على ما يمكنك القيام به في اختبار الوحدة.على سبيل المثال لا يمكنك القيام ب WaitAll على WaitHandle في اختبار الوحدة، فأنت تستخدم مضيف اختبار Microsoft.

لا داعي للقلق بشأن ذلك إلا إذا كنت تقوم بالتشغيل المتداخل لـ COM، وفي هذه الحالة تكون هناك مشكلات في التنظيم.ليس له أي تداعيات على .net نفسه.

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